我想做类似的问题: how to include the node XML in my XSLT text output? 或者,很快解释:
上面引用的主题中提供的两个选项都很有意思,但不起作用,因为我的输入XML doc使用(可能是多个)命名空间,并且:
示例:
<bla:Library xmlns:bla="ns1" xmlns:blub="ns2">
<blub:Book id="123">
<Title>Python Does Everythig & more</Title>
<Author>Smith</Author>
</Book>
...
并且,与原始帖子不同,结果应该是(注意&amp;的引用和处理)。并且,是的,在我的情况下输出语法是不同的(不是与DB相关,因此我需要原始XML输出周围的引号),但要坚持原始示例...:
Python Does Everything & more|Smith|"<bla:Book xmlns:bla=\"ns1\" xmlns:blub=\"ns2\" id=\"123\"><blub:Title>Python Does Everythig & more</Title>Author>Smith</Author></Book>"
好像这很不可能,但也许有人知道一个很好的伎俩... :-) 问候, TGE
答案 0 :(得分:0)
使用标准XSL我找不到这样做的方法,但是我使用了创建扩展模块的可能性(在我的情况下使用libxslt - 但似乎是标准的XSL),它进行转换。 所以,我的XSL现在看起来像这样:
<xsl:stylesheet version="1.0" ...
xmlns:tge="http://xmlsoft.org/xslt/tgeplugin"
extension-element-prefixes="tge">
...
<xsl:for-each select="bla:Book">
<xsl:text> "</xsl:text><tge:tgeplugin select="."/><xsl:text>"</xsl:text>
</xsl:for-each>
我的扩展插件实现&#34; tgeplugin&#34; (参见libxslt示例如何做到这一点)。在那里,我使用了一些libxml2函数来有效地生成一个新的XML标签&#34;&lt; text&gt;&#34;包含实际输入XML作为文本值(带引号转义)。
不是标准的XSL,但对于我的问题可能是最不丑的方式: - )