我在xsl文件中有一个变量(varXml
),它实际上保留了类似xml的变量:<apps><det id="aaaa"><det key="name"><det id="12"/><tur key="34" id="00x"/></det></det></apps>
。
xsl文件的格式如下所示:
<xsl:element name="opersApps">
<xsl:attribute name="sts">1</xsl:attribute>
<xsl:value-of select="$varXml"/>
</xsl:element>
结果是:
<opersApps sts="1">
<apps><det id="aaaa"><det key="name"><det id="12"/><tur key="34" id="00x"/></det></det></apps>
</opersApps>
现在看起来像here。
中间部分(变量varXml)不看xml。如何将它集成为xml的一部分? 我希望看起来像这样:
<opersApps sts="1">
<apps>
<det id="aaaa">
<det key="name">
<det id="12"/>
<tur key="34" id="00x"/>
</det>
</det>
</apps>
</opersApps>
感谢。
稍后编辑: varXml看起来像这样:
String varXml ="<det id=\"aaaa\">\n" +
" <det key=\"name\">\n" +
" <det id=\"12\"/>\n" +
" <tur key=\"34\" id=\"00x\"/>\n" +
" </det>\n" +
"</det> ";
答案 0 :(得分:3)
有两种方法。
(a)将XML字符串解析为树,然后使用XSLT指令(例如,xsl:copy-of)将其作为树进行操作。在XSLT中没有解析XML字符串的标准方法,但许多产品都有扩展(例如saxon:parse())或允许您自己编写。
(b)使用disable-output-escaping =“yes”将XML字符串复制到序列化输出。这不适用于所有环境 - 它取决于支持该功能的处理器以及在使用XSLT处理器的序列化程序的环境中运行。但它是为数不多的可以证明禁用输出转义的用例之一。
答案 1 :(得分:2)
在纯XSLT / XPath (版本1.0和2.0)中无法进行此类转换。
最佳建议:永远不要将XML文档或片段表示为字符串 - 这会破坏标记并将其展平为一维文本。
如果无法更改变量的值以包含实际标记,则需要将此变量传递给扩展函数,该函数将解析字符串并返回实数XML文档。
另一种可能的解决方案是使用disable-output-escaping
属性,但这不能保证在所有XSLT处理器上都能正常工作,并严重违反XSLT体系结构模型。
我建议始终避免使用DOE 。