0

以下是示例 xml:

 <root>
    <slide name="abc.xml" nav_info="foo" nav_lvl_1="foobar" nav_lvl_2="foobarz">
        <title>a</title>
        <Introduction>
            <para>b</para>
        </Introduction>
        <Text>
            <header>c</header>
            <para>d</para>
            <header>e</header>
            <para>f</para>
            <header>g</header>
            <para>h</para>
        </Text>
        <Statement>
            <para>i</para>
        </Statement>
    </slide>
</root>

我必须使用 xslt 获取每个节点的文本...获取节点的文本没有任何问题titlestatement但是,当我尝试遍历节点 Text 时,我只得到第一个headerpara. 为了更好地理解这里是我正在做的!

<xsl:choose>
    <xsl:when test="@nav_info='foo'">
        <xsl:for-each select="Text">
            <xsl:if test="header">
                   <xsl:value-of select="header">
            </xsl:if
            <xsl:if test="para">
                    <xsl:value-of select="para">
            </xsl:if
        </xsl:for-each>
    </xsl:when>
</xsl:choose>

Thsi 将 sme 输出为:

cd 预期输出...

c d e f g h 

按顺序..请有任何建议!谢谢

4

1 回答 1

2

因为您使用的是 XSLT 1.0,所以您<xsl:value-of select="header"/>只返回第一个的值。

您可能只需要执行以下操作,遍历 的所有子项<Text>

<xsl:when test="@nav_info='foo'">
    <xsl:for-each select="Text/*">
       <xsl:value-of select=".">
    </xsl:for-each>
</xsl:when>

无需检查单个元素。

<header>如果存在名为and以外的元素的风险<para>,则使用:

<xsl:when test="@nav_info='foo'">
    <xsl:for-each select="Text/header | Text/para">
       <xsl:value-of select=".">
    </xsl:for-each>
</xsl:when>

union 构造|将确保您的节点按文档顺序进行处理。

于 2013-06-29T20:16:08.207 回答