繁体   English   中英

从XML名称空间插入和删除节点

[英]Inserting and removing nodes from an XML namespace

我正在尝试替换节点的名称,但是出现以下错误“参考节点不是该节点的子节点”。 我想我知道为什么会这样,但是似乎无法解决此问题。 这是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”,但他不起作用。

如果您可以使用.Net 3.5 LINQ to 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 在旧版API上使用LINQ to XML的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM