【问题标题】:XPath: From a node, select all the deepest descendants from the second child onXPath:从一个节点中,选择第二个孩子的所有最深的后代
【发布时间】:2013-06-19 10:29:00
【问题描述】:
<?xml version="1.0"?>
<shipTo country="US">
<name><strong>Alice Smith</strong></name>
<street>123 Maple Street</street>
<city><hi>Mill Valley</hi></city>
<state>CA</state>
<zip>90952</zip>
</shipTo>
要选择的 xpath 表达式是什么 "123 Maple Street, Mill Valley, CA, 90952"?
【问题讨论】:
标签:
html
xml
xpath
xml-parsing
html-parsing
【解决方案1】:
使用 XPath 2.0 或 XQuery 1.0 你可以使用
string-join(/shipTo/*[position() gt 1], ', ')
获取字符串123 Maple Street, Mill Valley, CA, 90952。
使用 XPath 1.0,您可以选择元素
/shipTo/*[position() > 1]
但您需要使用您使用 XPath 的宿主语言(例如 XSLT 或带有 XPath API 的编程语言)来构造字符串,以迭代选定的元素并连接字符串值。
【解决方案2】:
要从 shipTo 的所有子节点获取所有文本节点,但不是名称,请尝试以下操作:
shipTo/*[local-name() != 'name']//text()
要获得逗号分隔的列表,您需要使用 xlst 或 xpaht-2.0