以下是示例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获取每个节点的文本...我在获取节点title
和statement
的文本时没有任何问题但是,当我尝试循环节点时文字我只得到header
和para
。为了更好地理解,这就是我在做什么!
<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给出输出为:
c
和d
预期产出......
c d e f g h
按顺序..有任何建议请! 感谢
答案 0 :(得分: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>
和<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构造|
将确保按文档顺序处理节点。