我需要能够跟踪文档中任何特定值的位置。我会使用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"
答案 0 :(得分:1)
我想你想迭代每个value
并进行检查。下面的xpath应该适合你:
string-join((for $a in /test/value
return
(if ($a[@cat='mythology']) then
concat('"',$a,'"') else
'""')),'
')
简化为:
string-join((for $a in /test/value
return
concat('"',($a[@cat='mythology'],'')[1], '"'))
,'
')
答案 1 :(得分:0)
这是我要找的空字符串:
for $a in /test/value
return
if ($a[@cat='mythology']) then
$a[@cat='mythology'] else
""
有人能解释为什么这个xpath的行为与原问题中的行径不同吗?
答案 2 :(得分:0)
我认为/test/value/(.[@cat = 'mythology'], '')[1]
足够并且比for .. return if ... then ... else
更紧凑。