2009-05-26 38 views
70

Có một tài liệu XML như thế này:Matching một nút dựa trên giá trị của một người anh chị em ruột với 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> 

Làm thế nào để phù hợp với tất cả các/ghi/ghi/tên có như anh chị em ruột/ghi/ghi/ghi chép lại gõ với giá trị "A"?

Trả lời

96

Tìm thấy nó:

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

Đó là [đơn giản hơn và rõ ràng hơn] (http://stackoverflow.com/a/31118801/290085) để kiểm tra 'bản ghi' trước khi giảm dần thành' tên'. – kjhughes

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

Bạn cũng có thể lọc một yếu tố phụ huynh của trẻ em của nó:

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

+3

Đó là [đơn giản hơn và rõ ràng hơn] (http://stackoverflow.com/a/31118801/290085) để kiểm tra 'bản ghi-loại' trực tiếp mà không có biến vị ngữ bổ sung. – kjhughes

31

Đáng ngạc nhiên, không ai trong số các câu trả lời cho đến nay về câu hỏi cũ này cung cấp giải pháp XPath đơn giản đơn giản nhất.

này đơn giản XPath

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

chọn

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

theo yêu cầu.

Các vấn đề liên quan