2013-02-18 27 views
17

Tôi là người mới đến XPath.Biểu thức XPath để tìm các phần tử có tên thẻ chứa 'Tên'

Tôi đang tìm cách để có được tất cả các yếu tố có tên thẻ chứa một chuỗi cụ thể.

Ví dụ: nếu tôi có XML như dưới đây, tôi muốn nhận tất cả các phần tử có tên thẻ chứa từ 'Tên'. tức là, tôi muốn tìm nạp các yếu tố sau: <SquareName>, <RectangleName><ParallelogramName>.

Tôi đã thử một số kết hợp của name(), v.v., nhưng nó không hoạt động. Vui lòng đề xuất.

<Objects> 
<Four-Sided> 
    <Square> 
     <SquareName>ABCD</SquareName> 
     <Length>4</Length> 
     <Height>4</Height> 
     <Colour>Blue</Colour> 
    </Square> 
    <Rectangle> 
     <RectangleName>EFGH</RectangleName> 
     <Length>10</Length> 
     <Height>6</Height> 
     <Colour>Brown</Colour> 
    </Rectangle> 
    <Parallelogram> 
     <ParallelogramName>WXYZ</ParallelogramName> 
     <Length>12</Length> 
     <Height>4</Height> 
     <Colour>Black</Colour> 
    </Parallelogram> 
</Four-Sided> 
</Objects> 

Trả lời

22

Đối với một giải pháp XPath:

//*[contains(local-name(), 'Name')] 
+0

Sau khi xem xét kết quả, tôi thấy rằng một trong những yếu tố đó là trả về, tôi cần phải tránh một phần tử có tên thẻ là 'PeriodName'. Tôi có thể lập trình làm điều đó nhưng tự hỏi liệu XPath có một giải pháp cho điều đó không? – user2082317

+1

Bạn có thể sử dụng cụm từ thông dụng hoặc chỉ sử dụng cụm từ này, một biến vị ngữ khác (hoặc kết hợp chúng bằng 'hoặc'):' // * [contains (local-name(), 'Name')] [local-name ()! = 'PeriodName'] ' –

0

Vì không có tiền tố Namespace, bạn cũng có thể sử dụng

//*[contains(name(), 'Name')] 
+0

Gần với giải pháp. – mm759

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