XPathはXML Path Languageの略です。XMLドキュメント内の要素や属性をナビゲートするために使用できます。XPATHが初めての場合は、まず XPathチュートリアル を参照し、公式の XPATHドキュメント を学習してください。
AIチャットボットは、Xpathの生成と検証に非常に効果的です。
XPath 1.0のサブセットが、以下の制限付きでサポートされています:
-
ステップ内の軸
-
対応可能:
ancestor、ancestor-or-self、attribute、子、descendant、descendant-or-self
-
非対応:
following、preceding、following-sibling、preceding-sibling、namespace
-
-
述語
-
対応可能:
現在のノードまたはその祖先ノードとそのプロパティ(属性、名前空間)に関する条件
-
非対応(例):
位置番号、軸 child::、descendant、descendant-or-self、following::、preceding::、following-sibling::、preceding-sibling::、関数 last()
-
基本ルール
-
パス内で
/および//を使用する -
名前内でシングルクォート
' 'を使用する -
リクエストを結合するためにパイプ
|を使用する -
名前は大文字と小文字を区別します:
<Body>は<body>とは異なります
**Examples**
XPath 例 1 および XPath 例 2(名前空間付き)は、以下の例のファイルです:
-
すべての要素とすべての属性をインポートする
//* | //@* -
すべての要素と attribute1 の値をインポートする
(<elem1 attribute1=\"翻訳する\" attribute2=\"翻訳しない\"/>)//* | //@attribute1 -
子要素のすべての子孫をインポートする
//子//* -
属性 translate='true' である場合にのみ、要素 lis とその子孫をインポートする
(<lis translate="true">translate this</lis><lis translate="false">do not translate this</lis>)//lis[@translate='true']/descendant-or-self::* -
要素の属性が translate='true' である場合、すべての要素と子孫をインポートする
//*[@translate='true']/descendant-or-self::* -
要素 Data 内の属性 Text の値をインポートする
<Data Text="Text for translation">//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が属性'updated'(2015年)を持つ場合、要素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']//* -
<Text>要素を<Child>内でインポートします://*[local-name()='Child']/*[local-name()='Text'] -
属性
<CATEGORY>が<CONTRACT>内で値<ORIGINAL>を持つ場合、要素<CONTRACT>配下のすべての要素をインポートします://*[local-name()='CONTRACT' and @CATEGORY='ORIGINAL']//*
-
-
名前空間と属性を持つXML
<root>xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"<Child translate='1'>translate this</Child>-
属性translateが1の場合、要素
<Child>をインポートします://*[local-name()=\"Child\"][@*[local-name()='translate']='1'] -
属性translate=trueを持つすべての要素をインポートします:
//*[@*[local-name()='translate']='true']
-
-
名前空間を持つXML。要素
tuから訳文要素をインポートしますが、属性IDに'img'または'extra'が含まれる場合は除外します:-
ファイル例:
<tu id=\"pages|content|extra\"><ori xml:lang=\"en\">Course one</ori><target xml:lang=\"lang\">Course one</target></tu> -
XPATH例:
//*[local-name()='tu' and not(contains(@ID,'img') or contains(@ID,'extra'))]/*[local-name()='訳文']
-
-
<lis translate=\"true\">とその子孫を除き、<コメント>と<lis>以外のすべての要素をインポートします://*[count(ancestor-or-self::node()[(name()='lis' and (not(@translate='true')) ) or name()='コメント'])=0] -
<コメント>を除き、属性<... attribute2=\"Do not translate\">を持つ要素とその子孫以外のすべての要素をインポートします://*[count(ancestor-or-self::node()[(@attribute2='Do not translate') or name()='comment'])=0] -
属性
varNameとglossNameの値をインポートしますが、その祖先が属性attribute1='translate'またはattribute1='編集'を持っている場合に限ります://*[(self::node()[@attribute1='translate' or @attribute1='編集'])]//@*[local-name()='varName' or local-name()='glossName'] -
属性
ID= Back、Menu、またはTimeを持つ要素を除き、すべての要素と属性をインポートします://*[not(ancestor-or-self::node()[@ID='Back' or @ID='Menu' or @ID='Time'])] | //@*[not(ancestor-or-self::node()[@ID='Back' or @ID='Menu' or @ID='Time'])]この場合、すべてをインポートして、インポートに不要な属性をロック済にする方が良い場合があります。セグメントがロック済になったら、エディタで原文を訳文にコピーして、オリジナルを翻訳に転送します。
-
属性
IDの値がBack、Menu、またはTimeであるすべての要素とその子孫をロック済にします://*[@Name='Back' or @Name='Menu' or @Name='Time']/descendant-or-self::* -
属性
IDの値がBack、Menu、またはTimeであるすべての属性とその子孫をロック済にします//*[@Name='Back' or @Name='Menu' or @Name='Time']//@*
-
いくつかの外部 例。
コンテキストメモ
コンテキストメモは、訳文セグメントにインポートできます。
このサンプルには3つの例があります:
<?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のメモ">翻訳用2</field> <context3>要素2のメモ</context3> </element> </root>
-
親要素の属性 (コンテキスト 1): ../@context1
-
自己要素の属性 (コンテキスト2): @context2
-
兄弟要素 (コンテキスト 3): ../context3
要素と属性: //*をインポートする場合、コンテキストメモのコンテンツも原文セグメントにインポートされます。要素と属性の一般的なインポートからコンテキストメモの要素/属性を除外します。