gpt4 book ai didi

xml - 如何防止XmlDocument.Save编写新元素的 namespace ?

转载 作者:行者123 更新时间:2023-12-03 01:18:55 26 4
gpt4 key购买 nike

我编写了一个PowerShell脚本,该脚本可以查看XML并取消对某些项目的注释。
我这样做的方法是删除注释并创建新的XmlElement对象取代它。

我的问题是,当我将文件保存在现有文件上时,XmlDocument在根元素xmlns=""上添加了额外的属性。
在保存之前,我使用调试器查看了XmlDocument对象,新元素的OuterXml具有以下结构:

  <register type="IComStack" mapTo="ComStackEth">
<lifetime type="singleton" />
<constructor>
<param name="host" type="System.Net.IPAddress">
<value value="127.0.0.1" typeConverter="IPAddressTypeConverter" />
</param>
</constructor>
</register>

保存后,查看文件,我的元素如下所示:
  <register type="IComStack" mapTo="ComStackEth" xmlns="">
<lifetime type="singleton" />
<constructor>
<param name="host" type="System.Net.IPAddress">
<value value="127.0.0.1" typeConverter="IPAddressTypeConverter" />
</param>
</constructor>
</register>

然后,我回到调试器,再次查看我的元素,然后以正确的格式看到它,即没有xmlns属性。

我使用 $config.Save($configPath) top保存我的xml并使用以下命令加载它:
$config= new-object System.Xml.XmlDocument
$config.Load($configPath)

有谁知道我如何防止 XmlDocument.Save添加 namespace 属性?

最佳答案

Does anyone know how I can prevent XmlDocument.Save from adding the namespace attribute?



通过在正确的 namespace 中创建元素。

孤立地,XML文档
  <register type="IComStack" mapTo="ComStackEth">
<lifetime type="singleton" />
<constructor>
<param name="host" type="System.Net.IPAddress">
<value value="127.0.0.1" typeConverter="IPAddressTypeConverter" />
</param>
</constructor>
</register>

包含许多具有各种本地名称且没有 namespace 的元素。和XML文档
<root xmlns="http://example.com">
<!-- content goes here -->
</root>

root命名空间中包含一个名为 http://example.com的元素。如果要向此 root元素添加子节点,而这些节点不在 http://example.com命名空间中,则序列化程序必须添加合适的命名空间声明-如果未添加 xmlns="",则结果将不正确,因为以前没有命名空间将“移动”到 http://example.com命名空间。
<root xmlns="http://example.com">
<register type="IComStack" mapTo="ComStackEth" xmlns="">
<lifetime type="singleton" />
<constructor>
<param name="host" type="System.Net.IPAddress">
<value value="127.0.0.1" typeConverter="IPAddressTypeConverter" />
</param>
</constructor>
</register>
</root>

因此,实际上,根据XML namespace 的规则,调试器和最终XML文档都是正确的。

如果要避免让序列化程序添加 xmlns="",则需要确保使用与要添加的父元素相同的 namespace 创建要插入的节点。确切的实现方式取决于创建 XmlElement对象的方式。

关于xml - 如何防止XmlDocument.Save编写新元素的 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com