我有以下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>
答案 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
属性(您不需要)。