XPATH基于条件值显示

时间:2013-05-15 12:59:36

标签: xslt xpath

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

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

</chapter>

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

1)如果<concept><title>没有出现,那么<sections><title>。副反面也.. ..

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

换句话说,您只想要concept/title下的最后sections/titlechapter?这个XPath应该这样做(假设当前上下文是chapter

(concept/title | sections/title)[last()]