考虑包含元素<A>
的Xml文档。该元素包含多个名为<B>
的元素。这些元素中的每一个都包含许多元素。
我希望得到一个节点集,包含每个<B>
元素中的第一个元素,按照出现的顺序。
答案 0 :(得分:1)
您可能需要考虑此XPath:
//B/*[1]
XPath的第一位(//B
)查找所有<B>
个元素。然后从每个<B>
元素开始,下一位(/*[1]
)将返回第一个子元素。
示例XML(OP应该是发布示例的人,以使他的问题更清楚):
<A>
<B>
<foo/>
<bar/>
</B>
<B>
<foo/>
<bar/>
</B>
<B>
<foo/>
<bar/>
</B>
</A>
由freeformatter在线xpath测试程序中输出上述XPath:
Element='<foo />'
Element='<foo />'
Element='<foo />'
答案 1 :(得分:0)
这就是你想要的吗?
<?xml version="1.0"?>
<root>
<a>
<b><c id="1" /></b>
<b><c id="2" /></b>
</a>
<a>
<b><c id="3" /></b>
<b><c id="4" /></b>
<b><c id="5"/></b>
<b>
<c id="6" />
<c id="7" />
</b>
</a>
<a>
<f><c id="3" /></f>
<b><d id="4" /></b>
</a>
使用XPath
root / a / b [position()= 1]
导致:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<b>
<c id="1"/>
</b>
<b>
<c id="3"/>
</b>
<b>
<d id="4"/>
</b>
</root>
答案 2 :(得分:0)
给出一个示例输入XML
<root>
<A>
<B>B 1 1</B>
<B>B 1 2</B>
</A>
<A>
<B>B 2 1</B>
<B>B 2 2</B>
</A>
</root>
以下XPath
//A//B[1]/text()
有结果
B 1 1
B 2 1
因为B
的每个第一个A
元素都被选中。
使用//A//B[1]
将产生完整的B
个节点:
<B>B 1 1</B>
<B>B 2 1</B>