【发布时间】:2014-05-14 14:25:11
【问题描述】:
我想做类似这里问的事情: how to include the node XML in my XSLT text output? 或者,简要说明:
- 输入是 XML
- 使用 XSL 转换为不同的语法(非 XML)
- 将 XML 子树逐字复制到输出中
上面提到的主题中提供的两个选项都很有趣,但不起作用,因为我的输入 XML 文档使用(可能是多个)命名空间,并且:
- 使用 xsl:output=text(答案 2)时,输入 XML 的命名空间会丢失。我可以使用 name() 而不是 local-name() 但仍然缺少命名空间声明。有没有一种收集引用的命名空间声明并插入它们的好方法?
- 如果我使用 xsl:output=xml 方式(答案 1),我可以正确获取生成的 XML 中的命名空间,但是我需要以某种方式转义 XML 属性的引号 - 知道该怎么做吗?
- 解决方案 1 的另一个问题是,如果 XML 特殊字符(如 &位于输入 XML 中,则文本输出仍为 & (这当然是正确的,但不是我需要的)
例子:
<bla:Library xmlns:bla="ns1" xmlns:blub="ns2">
<blub:Book id="123">
<Title>Python Does Everythig & more</Title>
<Author>Smith</Author>
</Book>
...
并且,与原始帖子不同,结果应为(注意&的引用和处理)。而且,是的,在我的情况下输出语法是不同的(与 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>"
似乎这是不可能的,但也许有人知道一个不错的技巧...... :-) 问候, 哥们
【问题讨论】:
-
“似乎这完全不可能。” 确实如此。 “看起来像 XML,但所有双引号都被转义的东西”不是 XSLT 处理器实现的输出模式。您仍然可以使用 XSLT 创建 XML 位,但您必须使用更高层(即包含 XSLT 处理器的宿主语言)来组合您的自定义输出格式。
标签: xml xslt namespaces