我有一个包含以下 XML 的 XmlDocument 对象:
<root>
<childlist xmlns:pre="mydomain.com">
<pre:child someattribute="value" />
</childlist>
</root>
以字符串形式接收 XML 文档的客户端应用程序要求元素具有“pre:”前缀。
我的问题是,当我使用 .OuterXml 方法从 XmlDocument 获取 XML 文本时,前缀被删除:
<root>
<childlist xmlns:pre="mydomain.com">
<child someattribute="value" /> <!--where's the prefix?-->
</childlist>
</root>
我知道,从技术上讲,默认 namespace 不需要前缀,但是,同样,如果没有前缀,接收此 XML 的客户端将无法工作。
当我使用调试器检查节点时,.Name 属性是“pre:child”。所以 XmlDocument 对象存储前缀,它只是没有出现在 .OuterXml 中。
有没有办法序列化 XmlDocument 对象并包含元素名称前缀?
我尝试了几种使用 XmlSerializer 和 XmlTextWriter 对象的方法,但得到了相同的结果。也许 XmlDocument、XmlSerializer 或 XmlTextWriter 上有一个属性可以指定我希望将默认命名空间前缀包含在输出中?
(顺便说一句,如果您只是使用 .LoadXml() 将上述 XML 加载到 XmlDocument 对象中,则前缀将出现在 .OuterXml 中。只有在您使用 .AppendNode() 构建文档时,它们才会消失。)
最佳答案
有点找到了答案:
http://bytes.com/topic/c-sharp/answers/568487-inserting-xml-node-maintaining-prefix
它并不完美——它假设提供 NamespacedURI 的元素也需要前缀。但这是一个可行的开始。
关于.NET XmlDocument : Including default namespace prefixes in OuterXml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29017321/