XPath는 XML 경로 언어를 의미합니다. XML 문서의 요소와 속성을 탐색하는 데 사용할 수 있습니다. XPATH에 처음이라면 먼저 XPath 튜토리얼을 참조하고 공식 XPATH 문서를 학습하십시오.
AI 챗봇은 Xpath를 생성하고 검증하는 데 매우 효과적일 수 있습니다.
다음과 같은 제한 사항이 있는 XPath 1.0의 하위 집합이 지원됩니다:
-
단계의 축
-
지원
조상, 조상 또는 자기 자신, 속성, 하위 요소, 자손, 자손 또는 자기 자신
-
지원하지 않음
후속, 이전, 후속 형제, 이전 형제, 네임스페이스
-
-
조건부
-
지원
현재 노드 또는 조상 노드와 그 속성(속성, 네임스페이스)에 대한 조건
-
지원하지 않음 (예:)
위치 번호, 축 child::, 자손, 자손 또는 자기 자신, following::, preceding::, following-sibling::, preceding-sibling::, 함수 last()
-
기본 규칙
-
경로에서
/및//를 사용하십시오. -
이름에 단일 인용부호
' '를 사용하십시오. -
요청을 결합하기 위해 파이프
|를 사용하십시오. -
이름은 대소문자를 구분합니다:
<Body>는<body>와 다릅니다.
예시
XPath 예시 1 및 XPath 예시 2 (네임스페이스 포함)은 다음을 위한 예제 파일입니다:
-
모든 요소와 모든 속성을 가져오기
//* | //@* -
모든 요소와 속성1의 값을 가져오기
(<elem1 attribute1="translate" attribute2="Do not translate"/>)//* | //@attribute1 -
하위 요소의 모든 후손을 가져오기
//Child//* -
속성 translate='true'인 경우에만 요소 lis와 그 후손을 가져오기
(<lis translate="true">이것을 번역하세요</lis><lis translate="false">이것을 번역하지 마세요</lis>)//lis[@translate='true']/descendant-or-self::* -
요소의 속성이 translate='true'인 경우 모든 요소와 후손을 가져오기
//*[@translate='true']/descendant-or-self::* -
요소 Data에서 속성 Text의 값을 가져오기
<Data Text="번역할 텍스트">//data/@text -
<mT:translation>요소와 그 후손을 가져오되, 요소<mT:ignore>는 제외합니다.//mT:translation/descendant-or-self::*[not(ancestor-or-self::mT:ignore)] -
속성 translate='false'인 모든 요소 제외
//*[not(@translate='false')] -
속성 translate='false'인 요소 'lis' 제외
(<lis translate="false">번역하지 마세요)//*[not(self::lis[@translate='false'])] -
속성 translate='false'인 요소 'lis'와 그 후손 제외
(<lis translate="false"><p>번역하지 마세요)//*[not(ancestor-or-self::lis[@translate='false'])] -
'link'를 포함하는 모든 요소 제외
(<menu1link><tmenu41link>)//*[not(contains(name(),'link'))] -
그들 또는 그 조상이 'link'를 포함하는 속성 'lis'를 가진 경우 모든 요소 제외
(<ele lis=menu1link>, <mon lis=tmenu41link>)//*[not(ancestor-or-self::node()[contains(@lis, 'link')])] -
부모 LANG이 2015년의 'updated' 속성을 가지고 있는 경우 PT 요소를 가져옵니다.
(<LANG updated="20150213T121526"><PT>'//LANG[contains(@updated,'2015')]/PT -
'Description' 및 'Name' 요소는 'Definitions' 또는 'Types' 요소의 자손이 아닌 경우에만 가져옵니다.
://*[not(ancestor-or-self::*[(name()='Definitions') or (name()='Types')])]/*[(name()='Description') or (name()='Name')] -
네임스페이스가 있는 XML
<root xmlns:xhtml="http://www.w3.org/1999/xhtml"><Child><Text>translate this</Text></Child>-
<Child>에서 모든 요소를 가져옵니다://*[local-name()='Child']//* -
<Child>에서<Text>요소만 가져옵니다://*[local-name()='Child']/*[local-name()='Text'] -
속성
<CATEGORY>가<ORIGINAL>값을 가지는 경우<CONTRACT>요소 아래의 모든 요소를 가져옵니다.://*[local-name()='CONTRACT' and @CATEGORY='ORIGINAL']//*
-
-
네임스페이스와 속성이 있는 XML
<root>xmlns:xhtml="http://www.w3.org/1999/xhtml"<Child translate='1'>이것을 번역하세요</Child>-
속성 translate가 1인 경우
<Child>요소를 가져옵니다://*[local-name()="Child"][@*[local-name()='translate']='1'] -
속성 translate=true인 모든 요소를 가져옵니다:
//*[@*[local-name()='translate']='true']
-
-
네임스페이스가 있는 XML. 요소
tu에서 요소 target을 가져오되, 속성 id에 'img' 또는 'extra'가 포함된 경우는 제외합니다:-
파일 예시:
<tu id="pages|content|extra"><ori xml:lang="en">코스 하나</ori><target xml:lang="lang">코스 하나</target></tu> -
XPATH 예시:
//*[local-name()='tu' and not(contains(@id,'img') or contains(@id,'extra'))]/*[local-name()='target']
-
-
<comment>및<lis>를 제외한 모든 요소를 가져오되,<lis translate="true">및 그 자손은 제외하지 않습니다://*[count(ancestor-or-self::node()[(name()='lis' and (not(@translate='true')) ) or name()='comment'])=0] -
모든 요소를 가져오되
<comment>및 속성이<... attribute2="Do not translate">인 요소와 그 자손은 제외합니다://*[count(ancestor-or-self::node()[(@attribute2='Do not translate') or name()='comment'])=0] -
속성
varName및glossName의 값을 가져오되, 그 조상이 속성attribute1='translate'또는attribute1='edit'를 가지고 있는 경우에만 가져옵니다://*[(self::node()[@attribute1='translate' or @attribute1='edit'])]//@*[local-name()='varName' or local-name()='glossName'] -
속성이
Name= Back,Menu, 또는Time인 요소를 제외하고 모든 요소와 속성을 가져옵니다://*[not(ancestor-or-self::node()[@Name='Back' or @Name='Menu' or @Name='Time'])] | //@*[not(ancestor-or-self::node()[@Name='Back' or @Name='Menu' or @Name='Time'])]이 경우 모든 요소를 가져오고 가져오지 않아야 할 속성은 잠그는 것이 더 나을 수 있습니다. 세그먼트가 잠긴 후, 원본을 번역으로 전송하기 위해 편집기에서 소스를 대상으로 복사합니다.
-
속성이
Name이고 값이:Back,Menu, 또는Time인 모든 요소와 그 자손을 잠급니다://*[@Name='Back' or @Name='Menu' or @Name='Time']/descendant-or-self::* -
값이
Back,Menu, 또는Time인Name의 모든 속성을 잠급니다.//*[@Name='Back' or @Name='Menu' or @Name='Time']//@*
-
일부 외부 예시.
컨텍스트 메모
컨텍스트 메모는 번역된 세그먼트에 가져올 수 있습니다.
이 샘플에는 세 가지 예가 있습니다:
<?xml version-"1.0" encoding="utf-8"?> <root> <element context1="Note in attribute of parentElement 1 - select ../@context1"> <field context2="속성 1의 메모 - @context2를 선택" >번역1을 위해</field> <context3>요소 1의 메모 - ../context3을 선택</context3> </element> <element context1="상위 요소 2의 속성에 있는 메모"> <field context2="속성 2에 있는 메모">for translation2</field> <context3>요소 2의 메모</context3> </element> </root>
-
상위 요소의 속성 (컨텍스트 1): ../@context1
-
자기 요소의 속성 (컨텍스트 2): @context2
-
형제 요소 (컨텍스트 3): ../context3
가져오기 Elements&Attributes: //* 시 컨텍스트 메모의 콘텐츠가 소스 세그먼트로 가져와질 것입니다. Elements&Attributes에서 일반 가져오기에서 컨텍스트 메모 요소/속성을 제외하십시오.