【发布时间】:2015-01-28 18:36:57
【问题描述】:
所以我在让它工作时遇到了严重的问题(我确信这很简单,我对 XSL 的经验很少)。
我试图在一个结构如下的 xml 文档中迭代一堆非常不同的子元素:
<transaction>
<data_xml>
<document data_type="0">
<element1>value1</element1>
<element2>value2</element2>
<element3>value3</element3>
</document>
</data_xml>
</transaction>
我使用的是 XSL 1.0 版,考虑到我正在工作的系统的限制,我很确定我不能为此使用 2.0。
我想要的输出是:
<foo>
<bar:element1><!CDATA[[value]]></bar:element1>
<bar:element2><!CDATA[[value]]></bar:element2>
<bar:element3><!CDATA[[value]]></bar:element3>
</foo>
我目前使用的可怕的代码是:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<foo>
<xsl:for-each select="/transaction/data_xml/document[@data_type='0']/*">
<bar:<xsl:value-of select="name(name(/transaction/data_xml/document[@data_type='0']/*)"/>>
<![CDATA[<xsl:value-of select="/transaction/data_xml/document[@data_type='0']/*"/>]]>
</bar:<xsl:value-of select="name(/transaction/data_xml/document[@data_type='0']/*)"/>>
</xsl:for-each>
</foo>
</xsl:template>
</xsl:stylesheet>
但是,当我使用它时,它只是多次迭代同一个元素,而不是依次迭代每个元素。
有什么想法吗?除了因为看起来很糟糕的代码而向我开枪吗?
【问题讨论】:
-
您请求的输出不是格式良好的 XML 文档(
bar:前缀必须绑定到命名空间)。为什么三个 CDATA 值都相同? -
根据我的转换器,XSL 也是无效的。
-
因为我是个笨蛋,我没有仔细检查。不过感谢您的 cmets!