XPathはXMLパス言語の略です。XMLドキュメント内の要素や属性をナビゲートするために使用できます。XPATHに不慣れな場合は、まずXPathチュートリアルを参照し、公式のXPATHドキュメントを学んでください。
AIチャットボットは、Xpathの生成と検証に非常に効果的です。
以下の制限付きでXPath 1.0のサブセットがサポートされています:
-
ステップ内の軸
-
対応可能
ancestor、ancestor-or-self、attribute、child、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>とは異なります。
例
XPathの例1 と XPathの例2 (名前空間付き)は、次のための例ファイルです:
-
すべての要素とすべての属性をインポート
//* | //@* -
すべての要素と属性1の値をインポート
(<elem1 attribute1="translate" 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 -
要素'Definitions'または'Types'の子孫でない場合にのみ、'Description'と'Name'の要素をインポートします。
://*[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>が値<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">コース1</ori><target xml:lang="lang">コース1</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::* -
属性
Nameが値: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
要素と属性をインポートする場合: //* コンテキストメモの内容はソースセグメントにもインポートされます。要素と属性の一般的なインポートからコンテキストメモ要素/属性を除外します。