如何选择一组组中的第一个元素?

时间:2015-03-22 08:48:36

标签: xpath

考虑包含元素<A>的Xml文档。该元素包含多个名为<B>的元素。这些元素中的每一个都包含许多元素。

我希望得到一个节点集,包含每个<B>元素中的第一个元素,按照出现的顺序。

3 个答案:

答案 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>