gpt4 book ai didi

c# - 在 XML 命名空间中插入和删除节点

转载 作者:行者123 更新时间:2023-12-04 16:58:00 25 4
gpt4 key购买 nike

我正在尝试替换节点的名称,但出现以下错误“引用节点不是该节点的子节点”。我想我知道为什么会这样,但似乎无法解决这个问题。这是 XML:

 <payload:Query1 xmlns="" xmlns:payload="" xmlns:xsi="" xsi:schemaLocation="">
<payload:QueryId>stuff</payload:QueryId>
<payload:Data>more stuff</payload:Data>
</payload:Query1>

这是 C# 位:
doc.Load(readStream);
nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("payload", "location");
XmlNode Query1 = doc.SelectSingleNode("//payload:Query1", nsmgr);

public XmlDocument sendReply(args)
{
XmlNode newNode = doc.CreateElement("payload:EditedQuery");
Query.InsertBefore(newNode, Query1);
Query.RemoveChild(Query1);
return doc;
}

我试图用“EditedQuery”替换“Query”,但他不起作用。

最佳答案

如果您可以使用 .Net 3.5 LINQ 到 XML,

XElement root = XElement.Load(readStream);
XNamespace ns = "http://somewhere.com";
XElement Query1 = root.Descendants(ns + "Query1").FirstOrDefault();
// should check for null first on Query1...
Query1.ReplaceWith(new XElement(ns + "EditedQuery"));

或者,如果您不知道命名空间,或者不想对其进行硬编码:
XElement root = XElement.Load(readStream);
XElement Query1 = root.Descendants()
.FirstOrDefault(x => x.Name.Localname == "Query1");
// should check for null first on Query1...
Query1.ReplaceWith(new XElement(Query1.Name.Namespace + "EditedQuery"));

Jon Skeet的原因 why to use LINQ to XML here over older API's .

关于c# - 在 XML 命名空间中插入和删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17922570/

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