属性与

时间:2016-09-12 19:00:49

标签: xpath xpath-2.0

我需要能够跟踪文档中任何特定值的位置。我会使用XSL,但我正在工作的生态系统阻止了这一点。我正在使用Java Saxon-HE 9.7.0-2处理器。

XML

<test>
    <value cat="fiction">At the edge of the orchard</value>
    <value cat="mythology">Hero with a thousand faces</value>
    <value cat="fiction">Spill simmer falter wither</value>
</test>

的XPath

for $a in /test
    return
        (if ($a/value[@cat="mythology"]) then 
            $a/value[@cat="mythology"] else
            "")

我希望看到的是:

""
"Hero with a thousand faces"
""

我目前看到的是:

"Hero with a thousand faces"

Link to videlibri xpath tester

Link to saxon code

3 个答案:

答案 0 :(得分:1)

我想你想迭代每个value并进行检查。下面的xpath应该适合你:

string-join((for $a in /test/value
                                return
                                    (if ($a[@cat='mythology']) then 
                                        concat('&quot;',$a,'&quot;') else
                                        '&quot;&quot;')),'&#xa;')

简化为:

string-join((for $a in /test/value
            return
                concat('&quot;',($a[@cat='mythology'],'')[1], '&quot;'))
     ,'&#xa;')

答案 1 :(得分:0)

这是我要找的空字符串:

for $a in /test/value
return
    if ($a[@cat='mythology']) then 
        $a[@cat='mythology'] else
        ""

有人能解释为什么这个xpath的行为与原问题中的行径不同吗?

videlibri xpath tester

答案 2 :(得分:0)

我认为/test/value/(.[@cat = 'mythology'], '')[1]足够并且比for .. return if ... then ... else更紧凑。