簡體   English   中英

XPath 按屬性過濾並返回不同的值

[英]XPath filter by attribute and return distinct values

從下面我需要返回具有Category屬性的不同值列表。

<root>
    <classifications>
        <classification name="Category">Category One</classification>
        <classification name="Sub-Category">Sub-Category One</classification>
    </classifications>
    <classifications>
        <classification name="Category">Category Two</classification>
        <classification name="Sub-Category">Sub-Category One</classification>
    </classifications>
    <classifications>
        <classification name="Category">Category One</classification>
        <classification name="Sub-Category">Sub-Category Two</classification>
    </classifications>
    <classifications>
        <classification name="Category">Category Three</classification>
        <classification name="Sub-Category">Sub-Category One</classification>
    </classifications>
    <classifications>
        <classification name="Category">Category One</classification>
        <classification name="Sub-Category">Sub-Category Two</classification>
    </classifications>
    <classifications>
        <classification name="Category">Category Two</classification>
        <classification name="Sub-Category">Sub-Category One</classification>
    </classifications>
</root>

使用classifications/classification[@name="Category"]我得到:

Category One
Category Two
Category One
Category Three
Category One
Category Two

我需要的是:

Category One
Category Two
Category Three

此 XPath 將選擇不同的元素:

//classification[@name = "Category" and not(preceding::classification = .)]

或更具體的:

//classification[@name = "Category" 
    and not(preceding::classification[@name = "Category"] = .)
]

對於那些能夠使用 XPath 2.0 及更高版本的人:

另一種可能更靈活且似乎更有效(至少在 Saxon 9.8.0 中)的替代方法是:

distinct-values(//classification[@name = 'Category'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM