繁体   English   中英

XML将子元素添加到现有XML元素

[英]XML adding child element to existing XML element

我有以下XML元素:

<ctext:RootAugmentation>

</ctext:RootAugmentation>

我想在上述元素内添加以下元素:

<ctext:DetailsText>Example</ctext:DetailsText>

我有以下代码:

string filename = @"C:\test.xml";
XmlDocument doc = new XmlDocument();
doc.LoadXml(File.ReadAllText(filename));
XmlNodeList elemList = doc.GetElementsByTagName("ctext:RootAugmentation");
XmlElement detailsElement = doc.CreateElement("ctext:DetailsText");
detailsElement.InnerText = "Example";
if (elemList.Count == 1)
{
    for (int i = 0; i < elemList.Count; i++)
    {
        Console.WriteLine(elemList[i].InnerText);
        elemList[i].AppendChild(detailsElement);
    }

    doc.Save(filename);
}
else 
{
    // update existing "ctext:DetailsText" value
}

我可以添加子元素,但标签错误:

<ctext:RootAugmentation>
         <DetailsText>Example narrative</DetailsText>
</ctext:RootAugmentation>

我希望它以:

 <ctext:DetailsText>Example narrative</ctext:DetailsText>

前缀只是一种不必在使用它的每个元素中指定名称空间的方法,该名称空间很可能在首次使用该前缀时在文档中指定

要查找名称空间URI,可以在XML文档中查找并找到如下所示的属性:

<ctext:SomeElement xmlns:ctext="<namespace uri>">...

找到它之后,就可以使用CreateElement(string,string)重载来指定namespaceUri。

doc.CreateElement("DetailsText", "<namespace uri for ctext>");

这将导致元素看起来像:

<ctext:DetailsText />

可以CreateElement调用中指定前缀,即“ ctext:DetailsText”(或通过另一个重载),但是将根据您提供的namespaceUri自动查找该前缀,因此在您的情况下是不必要的。 如果要指定其他前缀,这将在namespaceUri中注册新前缀,并在元素上添加新的xmlns属性(不需要)。

暂无
暂无

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

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