我有一個關於XPath表達式的W3C規範(EBNF表示法)的初學者問題。該規範可在以下網址找到:http://www.w3.org/TR/xpath/。特別是我有一個關於理解以下表達式的問題:解析XPath表達式瞭解EBNF生產規則
(//attribute::name | //attribute::id)[starts-with(string(self::node()), "be") or starts-with(string(self::node()), "1")]
這似乎是一個有效的表達式。我驗證了使用http://www.freeformatter.com/xpath-tester.html與下面的XML文檔:
<documentRoot>
<!-- Test data -->
<?xc value="2" ?>
<parent name="data" >
<child id="1" name="alpha" >Some Text</child>
<child id="2" name="beta" >
<grandchild id="2.1" name="beta-alpha" ></grandchild>
<grandchild id="2.2" name="beta-beta" ></grandchild>
</child>
<pet name="tigger" type="cat" >
<data>
<birthday month="sept" day="19" ></birthday>
<food name="Acme Cat Food" ></food>
</data>
</pet>
<pet name="Fido" type="dog" >
<description>
Large dog!
</description>
<data>
<birthday month="feb" day="3" ></birthday>
<food name="Acme Dog Food" ></food>
</data>
</pet>
<rogue name="is this real?" >
<data>
Hates dogs!
</data>
</rogue>
<child id="3" name="gamma" mark="yes" >
<!-- A comment -->
<description>
Likes all animals - especially dogs!
</description>
<grandchild id="3.1" name="gamma-alpha" >
<![CDATA[ Some non-parsable character data ]]>
</grandchild>
<grandchild id="3.2" name="gamma-beta" ></grandchild>
</child>
</parent>
</documentRoot>
這給了我下面的結果:
Attribute='id="1"'
Attribute='name="beta"'
Attribute='name="beta-alpha"'
Attribute='name="beta-beta"'
這是我不太清楚這EBNF作品的順序會產生上面的查詢。
感謝您的幫助。
太棒了!現在我懂了。非常感謝。我完全錯過了FilterExpression規則。我被卡住了「Step = AxisSpecifier NodeTest Predicate」。很快,很好的答覆! – user1362700