首页 > 解决方案 > 如何在 XSLT 中选择除 p 之外的任何节点

问题描述

我想选择node<p>XSLT 之外的任何内容并在rap元素内显示其值。我为此尝试了以下代码。

输入:

<section>
  <rap>
    <bold>Device,</bold>
    <p><bold>manufacturer,</bold></p>
    This is paragaraph without element
    <p><bold>country</bold></p>
    <p><bold>country2</bold></p>
  </rap>
</section>

试过的代码:

<xsl:template match="rap[p]/node()[. except p]">
    <rap>
        <xsl:value-of select="."/>
    </rap>
</xsl:template>

预期输出:

<output>
  <rap>Device,</rap>
  <rap>This is paragaraph without element</rap>
</rap>

电流输出:

<output><rap>
            </rap></output><output><rap>Device,</rap></output><output><rap>
            </rap></output><output><rap>manufacturer,</rap></output><output><rap>
            This is paragaraph without element
            </rap></output><output><rap>country</rap></output><output><rap>
            </rap></output><output><rap>country2</rap></output><output><rap>
        </rap></output>

试过xsltfiddle:https ://xsltfiddle.liberty-development.net/pNvtBGs/2

谢谢你。

标签: xmlxslt-2.0

解决方案


尝试这个

<xsl:template match="rap">
    <output>
        <xsl:for-each select="node()[normalize-space() ne '']">
        <xsl:if test="not(self::p)">
            <rap><xsl:value-of select="normalize-space(.)"/></rap>
        </xsl:if>
        </xsl:for-each>
    </output>
</xsl:template>

请参阅https://xsltfiddle.liberty-development.net/pNvtBGs/3上的转换


推荐阅读