查找未嵌套在子节点中的文本节点

时间:2012-04-27 15:34:30

标签: xml xslt

我有以下xml:

<p>
  <tx>
    <ts>
      <mtr>
        <pos>
          <Part>Text1</Part>
        </pos>
      </mtr>
    Text2<hyph/>Text3
    </ts>
  </tx>
</p>
<p>
  <tx>
    <ts>
      Text4
    </ts>
  </tx>
</p>

所以基本上我有一系列p / tx / ts,ts有时会有可选的子节点。

现在我需要在p / tx / ts下面找到所有文本节点,而不是那些嵌套在ts子节点中的文本节点。 在上面的例子中我需要text2,text3和text4但不需要text1(因为它嵌套在mtr / pos / part中,即ts的子节点)

2 个答案:

答案 0 :(得分:0)

此XPath应该返回您要查找的内容:

/*/p/tx/ts/text()[normalize-space(.)!='']

注意:添加了第一个/*,因为您需要一个根元素才能使您的示例格式正确。

答案 1 :(得分:0)

这回报了我要找的东西:

<xsl:template match="p">
  <xsl:for-each select="./tx/ts">
    <xsl:apply-templates select="child::text()" />
  </xsl:for-each>
</xsl:template>