Xpath:如果在节点内部,测试是否位于某个属性内部,是否有另一个类似的节点
Xpath: If inside a node, test to see if it is located inside a certain attribute and if there is another similar node
我有这个 xml 文件
<book>
<chapter category="AIRCRAFT">
<title>Flight Controls</title>
<section>Bombardier</title>
<orderedlist>
<listitem><para>list item 1</para></listitem>
<listitem><para>list item 2</para></listitem>
<listitem><para>list item 3</para></listitem>
</orderedlist>
</section>
</chapter>
<chapter category="PILOT">
<title>Flight Operations</title>
<section>
<title>Crew Bases</title>
<orderedlist>
<listitem><para>list item 1</para></listitem>
<listitem><para>list item 2
<note>
<para>Note: Additional information.</para>
</note>
</para>
</listitem>
<listitem><para>list item 3</para></listitem>
</orderedlist>
</section>
</chapter>
<chapter category="MAINTENANCE">
<title>Maintenance</title>
<section>
<title>Maintenance Bases</title>
<orderedlist>
<listitem><para>list item 1</para></listitem>
<listitem><para>list item 2</para></listitem>
<listitem><para>list item 3</para></listitem>
</orderedlist>
</section>
</chapter>
<chapter category="COMPANY">
<title>Company Policy Manual</title>
<section>
<title>Employment Standards and Eligibility</title>
<orderedlist>
<listitem><para>list item 1</para></listitem>
<listitem><para>list item 2</para></listitem>
<listitem><para>list item 3</para></listitem>
</orderedlist>
</section>
</chapter>
</book>
我需要回答这两个问题:
1)如果在 para 元素内,测试它是否位于类别属性设置为“MAINTENANCE”的章节内
2)如果在一个listitem元素中,测试它之前是否有另一个listitem
我只需要语句。
您可以使用 ancestor::
轴执行 (1):
ancestor::chapter[1]/@category = 'MAINTENANCE'
和 (2) 使用 preceding-sibling::
preceding-sibling::listitem
如果当前上下文节点是 listitem
,如果 "inside a listitem element" 可以包含后代节点(para
元素节点或其中的文本节点),那么您将需要更多类似
的东西
ancestor-or-self::listitem[1]/preceding-sibling::listitem
(如果当前上下文节点不是listitem
,往树上走,直到碰到一个,然后从那里,看前面有没有listitem
兄弟姐妹)
我有这个 xml 文件
<book>
<chapter category="AIRCRAFT">
<title>Flight Controls</title>
<section>Bombardier</title>
<orderedlist>
<listitem><para>list item 1</para></listitem>
<listitem><para>list item 2</para></listitem>
<listitem><para>list item 3</para></listitem>
</orderedlist>
</section>
</chapter>
<chapter category="PILOT">
<title>Flight Operations</title>
<section>
<title>Crew Bases</title>
<orderedlist>
<listitem><para>list item 1</para></listitem>
<listitem><para>list item 2
<note>
<para>Note: Additional information.</para>
</note>
</para>
</listitem>
<listitem><para>list item 3</para></listitem>
</orderedlist>
</section>
</chapter>
<chapter category="MAINTENANCE">
<title>Maintenance</title>
<section>
<title>Maintenance Bases</title>
<orderedlist>
<listitem><para>list item 1</para></listitem>
<listitem><para>list item 2</para></listitem>
<listitem><para>list item 3</para></listitem>
</orderedlist>
</section>
</chapter>
<chapter category="COMPANY">
<title>Company Policy Manual</title>
<section>
<title>Employment Standards and Eligibility</title>
<orderedlist>
<listitem><para>list item 1</para></listitem>
<listitem><para>list item 2</para></listitem>
<listitem><para>list item 3</para></listitem>
</orderedlist>
</section>
</chapter>
</book>
我需要回答这两个问题:
1)如果在 para 元素内,测试它是否位于类别属性设置为“MAINTENANCE”的章节内
2)如果在一个listitem元素中,测试它之前是否有另一个listitem
我只需要语句。
您可以使用 ancestor::
轴执行 (1):
ancestor::chapter[1]/@category = 'MAINTENANCE'
和 (2) 使用 preceding-sibling::
preceding-sibling::listitem
如果当前上下文节点是 listitem
,如果 "inside a listitem element" 可以包含后代节点(para
元素节点或其中的文本节点),那么您将需要更多类似
ancestor-or-self::listitem[1]/preceding-sibling::listitem
(如果当前上下文节点不是listitem
,往树上走,直到碰到一个,然后从那里,看前面有没有listitem
兄弟姐妹)