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

时间:2018-01-31 21:32:03

标签: c# xml

我有以下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>

1 个答案:

答案 0 :(得分:0)

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

要查找名称空间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属性(您不需要)。