2009-05-26 68 views
70

有這樣一個XML文檔中的節點:匹配基於一個兄弟姐妹的值使用XPath

<?xml version="1.0" encoding="UTF-8"?> 
<records type="array"> 
    <record> 
    <name>svn</name> 
    <record-type>A</record-type> 

    <ttl type="integer">86400</ttl> 
    <zone-id type="integer">69075</zone-id> 
    <aux type="integer">0</aux> 
    <id type="integer">xxx</id> 
    <active>Y</active> 
    <data>xxx.xxx.xxx.xxx</data> 

    </record> 
    <record> 
    <name>domain.tld.</name> 
    <record-type>NS</record-type> 

    <ttl type="integer">86400</ttl> 
    <zone-id type="integer">xxx</zone-id> 
    <aux type="integer">0</aux> 
    <id type="integer">xxx</id> 
    <active>Y</active> 
    <data>domain.tld.</data> 

    </record> 
    <record> 
    <name>blog</name> 
    <record-type>A</record-type> 
    <ttl type="integer">86400</ttl> 
    <zone-id type="integer">xxx</zone-id> 
    <aux type="integer">0</aux> 

    <id type="integer">xxx</id> 
    <active>Y</active> 
    <data>xxx.xxx.xxx.xxx</data> 
    </record> 
</records> 

如何搭配具有如兄弟/記錄/記錄所有/記錄/記錄/ /record-鍵入值「A」?

回答

96

發現:

/records/record/name[../record-type/text() = "A"] 
+3

這是[更簡單和更清晰](http://stackoverflow.com/a/31118801/290085)測試`記錄`之前下降到`名稱`。 – kjhughes 2015-06-29 19:54:34

-3
/records/record[record-type='A'] 
39

您還可以通過其子篩選父元素:

/records/record[record-type[text()='A']]/name

+3

這是[更簡單和更清晰](http://stackoverflow.com/a/31118801/290085)直接測試`記錄類型`沒有額外的謂詞。 – kjhughes 2015-06-29 19:55:37

31

出人意料的是,沒有一個答案至今對這個老問題提供最簡單的 XPath解決方案。

這簡單的XPath

/records/record[record-type = "A"]/name 

選擇

<name>svn</name> 
<name>blog</name> 

的要求。