.NET XmlDocument : Including default namespace prefixes in OuterXml

标签 .net xml namespaces

我有一个包含以下 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/

相关文章:

c# - ASPNET 核心 : Wrong Value for ContentRootPath

.net - 未找到入口点 mv3 和锐架构

c# - 引用中的 wp8 :Cannot find System. Drawing.dll

html - 来自 Jekyll 的无效 XML 实体引用

c++ - 将对象添加到命名空间 C++

c++ - 如何使用在命名空间中声明的类实例的 vector

c# - 我应该学习什么来提高我的技能?

java - 如何通过URL访问XML文件

java - 自定义 ListView 中的增量/减量

visual-studio - 在 Visual Studio 中从控制台转换为 Windows 应用程序