1
<chapter>
    <concept>
        <title>*********************</title>
    .
    .
    </concept>

    <sections>
       <title>*******************</title>

</chapter>

在上面的结构中,我想从<concept><title>or中检索文本<sections><title>。即使用一个 xpath 条件,我需要具有以下条件的值。

1) if<concept><title>没有出现 then <sections><title>。反之亦然。。

2)两个标题都在那里可用,然后我想考虑最近的节点值。即在上述结构中“ <sections><title>”是最新节点。

4

2 回答 2

1

您想要两者中的“最近”(第一个)

(/*/*[self::concept or self::sections]/title)[1]

如果您想要其中的“最新”(最后一个),请使用:

(/*/*[self::concept or self::sections]/title)[last()]

基于 XSLT 的验证

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select=
     "(/*/*[self::concept or self::sections]/title)[1]"/>
===============
  <xsl:copy-of select=
     "(/*/*[self::concept or self::sections]/title)[last()]"/>
 </xsl:template>
</xsl:stylesheet>

当此转换应用于以下 XML 文档时:

<chapter>
    <concept>
        <title>*********Title 1************</title>
    .
    .
    </concept>

    <sections>
       <title>**********Title 2*********</title>
    </sections>

</chapter>

计算两个 XPath 表达式并将其结果复制到输出:

<title>*********Title 1************</title>
===============
<title>**********Title 2*********</title>
于 2013-05-15T14:14:08.380 回答
0

所以换句话说,你只想要最后一个concept/titlesections/title出现在chapter? 这个 XPath 应该这样做(假设当前上下文是chapter

(concept/title | sections/title)[last()]
于 2013-05-15T13:05:55.170 回答