2012-07-09 28 views
8

Tôi đang làm việc trên ứng dụng asp.net dựa trên .net 2.0.sử dụng ký tự đại diện để khớp thuộc tính trong xpath

Và tôi gặp một số vấn đề khi xử lý XML.

Giả sử tôi có XML như thế này:

<person name="xxxyx" age="32" /> 

<person name="zzz" age="32" /> 

<person name="yyyxx" age="32" /> 

Bây giờ tôi muốn chọn người có tên chứa yx

Làm thế nào để sử dụng xpath để thực hiện nó?

Tôi chỉ biết biểu hiện này sẽ phù hợp với người có tên chính xác là "yx":

"//person[name='yx'"]" 

Làm thế nào để làm cho việc tìm kiếm mờ?

BTW, bất kỳ ý tưởng nào để sắp xếp người phù hợp theo thuộc tính được chỉ định như "tên"?

+0

như thế nào sắp xếp nên được thực hiện, thực hiện điều này đề cập đến một phép chuyển đổi XSL? – hielsnoppe

+0

Tôi chưa bao giờ sử dụng xsl. – hguser

+0

Điều này sẽ giúp: http://stackoverflow.com/questions/5607592/xpath-and-wildcards/5607636#5607636 –

Trả lời

9

Giống như @Utkanos đề xuất //person[contains(@name, 'yx')] phải khớp với các nút bạn muốn.

Bản thân XPath, ít nhất là theo kiến ​​thức của tôi, không có khả năng và không nhằm cung cấp thứ tự trên các nút, mà thay vào đó trả về các tập hợp nút "bộ sưu tập các nút không có thứ tự không trùng lặp" (xem 1 và nhận xét). Tuy nhiên trong phiên bản 2.0 có thể có những thay đổi đối với số 2 mà tôi không quen thuộc.

Giả sử phân loại nên được thực hiện trong một sự biến đổi XSL bạn có thể sử dụng <xsl:sort /> như thế này:

<xsl:apply-templates select="//person[contains(@name, 'yx')]"> 
    <xsl:sort select="@name" /> 
</xsl:apply-templates> 

Có một số thuộc tính thêm về <xsl:sort /> tài liệu ở đây: http://www.w3.org/TR/xslt#sorting

+2

Điều này vẫn đúng trong XPath 2.0 (và thực sự 3.0) mà XPath độc lập không có khả năng phân loại - bạn cần phải đi với XSLT hoặc XQuery. –

8

Sử dụng chức năng .

//person[contains(@name, 'yx')] 

Ngoài ra, lưu ý bạn cần @ trước name vì nó là một thuộc tính.

Demo.

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