给定一个XPath查询导致一个不同命名的属性列表,是否有一些东西可以附加到该查询以仅选择值并省略属性名称等? (为了便携性,我的目标是XPath 1.0)
具有地址的人的XML示例:
<people>
<person workaddr="foo" homeaddr="bar"/>
<person workaddr="baz" homeaddr="foo"/>
<person workaddr="qux" homeaddr="zoo"/>
</people>
我的XPath查询用于查找以地址 foo
以任何方式关联的任何人的所有地址:
//person[@*='foo']/@*['addr' = substring(name(.), string-length(name(.)) - string-length('addr') +1) and . != '']
(我意识到这将匹配任何具有值为 foo
的属性的人,而不仅仅是 foo
地址,因为在实际情况下除了工作和家庭地址之外还有其他属性 . 如果您碰巧知道如何改进我的查询以限制属性值检查到名称以 addr
结尾的属性,这将是一个很好的奖励)
至少根据http://www.freeformatter.com/xpath-tester.html#ad-output我的查询结果是:
Attribute='homeaddr=bar'
Attribute='workaddr=foo'
Attribute='homeaddr=foo'
Attribute='workaddr=baz'
我想要的只是 Value 观: bar foo foo baz
甚至 bar foo baz
提前致谢!
1 回答
这就是特定XPath测试器在输出中持久化的方式 . 您可以轻松切换到更好地满足您需求的不同工具,例如,http://www.xpathtester.com/xpath不会在输出中打印属性名称,因为您可以看到in this demo . 此外,XPath处理器库(如果您正在使用它)总是提供一种方法来只读取其API中属性的值 .
现在关于另一个问题,你似乎将结果限制为名称以'addr'结尾的属性,所以只需在前一个路径步骤中实现相同的谓词,以将'foo'的检查限制为名称以'addr结尾的属性':
demo