在输出中的元素上显式显示默认命名空间

Posted

技术标签:

【中文标题】在输出中的元素上显式显示默认命名空间【英文标题】:Explicitly show default namespace on element in output 【发布时间】:2018-10-12 14:03:04 【问题描述】:

我需要在输出中显式显示一个特定元素的默认命名空间,而不是根。在我当前的解决方案中,默认命名空间显示在根节点上。

在我的 XSLT 中,我已将命名空间添加到需要它的节点,但它没有显示在输出中。

<MessageParts xmlns="http://schemas.microsoft.com/dynamics/2011/01/documents/Message">

此命名空间与根相同,因此不会显示在输出中。有没有办法覆盖这个功能,所以它仍然会显示?

【问题讨论】:

嗯,为什么?这表明 Schema 使用限定节点,这意味着命名空间不应包含在任何后代元素中,因为它是从根继承的。 是的,没错,但客户仍然希望命名空间显示在元素上。该模式确实使用了合格的节点,因为客户还希望从元素中删除名称空间前缀。如果无法做到这一点,我会通知客户。 【参考方案1】:

无法强制 XSLT 序列化程序输出冗余名称空间声明。序列化规则的一般思想是,如果在解析后应用程序看不到区别,那么就没有必要担心它们。例如,这也意味着您无法控制元素上的属性顺序。

从技术上讲,在 XSLT 1.0 中,您也无法控制名称空间前缀的选择,但实际上所有已知的 XSLT 处理器都尊重您选择的前缀。

【讨论】:

以上是关于在输出中的元素上显式显示默认命名空间的主要内容,如果未能解决你的问题,请参考以下文章

为啥命名空间中定义的元素不能显式声明?

XML名命空间

LINQ to XML - 如何修复根元素中的默认命名空间

重命名元素的 XSLT 问题——更改命名空间

当存在内联命名空间时,如何显式引用封闭的命名空间?

元素中 XML 命名空间的错误输出