簡體   English   中英

如何基於xslt中以“ pro_”開頭的屬性值選擇max xml屬性?

[英]how to select max xml attribute based on its attribute value start with “pro_” in xslt?

我有一個怪異的要求來獲取以指定字符串開頭的最大值。下面是我的示例源代碼,正如我們所見, book元素具有一個名為id的屬性,如我們所見, id屬性的某些值是start與“親_”,如pro_60,pro_55,而其他的屬性值都只是純數,例如70,40。

所以我的問題是如何獲取以pro_開頭的屬性值,該數字為最大數 。在此示例中,以pro_開頭的最大數為65 ,因此預期結果為pro_65 ,我可以在我的代碼中進行操作,但我想知道我們是否可以僅使用做到這一點 ?任何幫助都非常有用!

XPath版本是1.0

<?xml version="1.0" encoding="UTF-8"?>
 <datas>
    <books>
        <book id="pro_60">Java</book>
        <book id="pro_55">Golang</book>
        <book id="pro_40">PHP</book>
        <book id="pro_65">C++</book>
        <book id="pro_55">Python</book>
        <book id="70">Javascript</book>
        <book id="40">HTML5</book>
    </books>
</datas>

使用XPath 2.0:

/datas/books/book/@id[starts-with(., 'pro_')][not(../../book/@id/number(substring-after(., 'pro_')) > number(substring-after(., 'pro_')))]

由於它取決於在路徑的最后一步中使用函數調用來計算原子值序列的功能,因此不能直接轉換為XPath 1.0。

較短的XPath 2.0表達式

max(/*/*/*/@id[starts-with(.,'pro_')]/number(substring(.,5)))

這只是計算最大值。

要選擇所有具有此最大值的id屬性的元素,請使用

(/*/*/*[@id = concat('pro_', string(max(/*/*/*/@id[starts-with(.,'pro_')]/number(substring(.,5)))))]

對於XPath 1.0,不能使用單個XPath 1.0表達式來計算。

暫無
暫無

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

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