【发布时间】:2020-08-04 18:49:00
【问题描述】:
我有一个这样的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<ApplicationConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ua="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="http://opcfoundation.org/UA/SDK/Configuration.xsd">
<ServerConfiguration>
<SecurityPolicies>
<ServerSecurityPolicy>
<SecurityMode>None_1</SecurityMode>
</ServerSecurityPolicy>
</SecurityPolicies>
</ServerConfiguration>
</ApplicationConfiguration>
我想要的是通过代码添加更多名为 ServerSecurityPolicy 的节点。 然后我使用这段代码:
string docaddress = "D:\\abc.xml";
XDocument doc = XDocument.Load(docaddress);
var root = doc.Root;
var these = root.Descendants().Where(p => p.Name.LocalName == "SecurityPolicies");
XElement addelement = new XElement("ServerSecurityPolicy");
addelement.Add(new XElement("SecurityMode", "None_1"));
foreach (var elem in these)
{
elem.Add(addelement);
}
doc.Save(docaddress);
它确实可以,但是新添加的节点是这样的:
<ServerSecurityPolicy xmlns="">
<SecurityMode>None_1</SecurityMode>
</ServerSecurityPolicy>
我不想要属性“xmlns”,然后我尝试通过以下方式删除它:
var these2 = root.Descendants().Where(p => p.Name.LocalName == "ServerSecurityPolicy");
foreach (var elem in these2)
{
label2.Text += elem.Attribute("xmlns").Name.LocalName;
elem.Attribute("xmlns").Remove();
}
label2.Text 显示“xmlnsxmlnsxmlsn...”,因此我认为 elem.Attribute("xmlns") 已指向我要删除的属性,但 Remove() 不起作用。
你能建议我一些方法来删除属性或添加没有属性的节点吗?
谢谢
【问题讨论】:
-
欢迎来到 Stack Overflow。您的示例代码无法编译,并且已将其更改为
elem.Add(addelement);以便它将编译,新节点确实不有xmlns=""in - 使用 XML您向我们展示的文件。我怀疑这是因为您只向我们展示了文档的 part 部分,而您省略的部分设置了根名称空间。如果你能提供minimal reproducible example,帮助你会容易很多。 -
您好 Jon Skeet,感谢您的回复。首先,你是对的,我将 XElement 命名为“ro”,但是当在这里发布线程时,我认为我应该使用更容易观察的东西,但我忘记更改最后一行。其次,由于xml文件很长,所以我只关注一些节点来缩短和简化问题,但从你的回答来看,错误似乎在其他地方。你能帮我检查一下完整的xml文件吗?
-
不,请不要只将其放在云端硬盘上 - 请在问题中提供minimal reproducible example。 (Stack Overflow 的目的是创建一个高质量问题和答案的存储库。将来查看您的问题的其他人应该能够理解您的问题是否与他们的问题相关。)我们不需要 actual 完整文档 - 但我们确实需要 完整文档来演示问题,以及重现问题的代码。请编辑问题以修复代码(理想情况下将其变成一个可以复制/粘贴的真正完整的控制台应用程序)和文档。
-
您好 Jon Skeet,感谢您指定我如何使用 Stack Overflow。我不确定控制台应用程序,但我已经按照我的理解编辑了我的问题(并检查了代码)。你能帮我重新检查一下我的问题吗?更多细节,正如你之前所说,我已经检查了根,我认为它的那些属性(
)创建了我的新节点的 xmlns 属性。
标签: c# linq-to-xml