我正在尝试编辑XML文档中的特定节点。我有以下XML数据:
<Items xmlns="http://foo.com/blah/blah">
<Item>
<Format>1</Format>
<Name>Edit this one</Name>
<MetaDataDictionary>
<MetaData>
<Name>Do not edit this one</Name>
<Value>0</Value>
</MetaData>
</MetaDataDictionary>
</Item>
<Item>
<Format>1</Format>
<Name>Edit this one</Name>
<MetaDataDictionary>
<MetaData>
<Name>Do not edit this one</Name>
<Value>0</Value>
</MetaData>
</MetaDataDictionary>
</Item>
</Items>
我想为每个
Item/Name
节点内容添加一个数字,但不向Metadata/Name
节点添加一个数字,将文件另存为test_n.xml
并重复n次。我正在使用的代码似乎为我提供了
Item/Name
节点所需的内容并正确保存了文件,但它也会更新Metadata/Name
节点,并且我不希望该值被更新。我知道问题出在navigator.Select
调用中,但我只是不知道如何更新一个而跳过另一个。XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
XPathNavigator navigator = doc.CreateNavigator();
XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
manager.AddNamespace("at", "http://foo.com/blah/blah");
for (int i = 0; i < 10; i++)
{
foreach (XPathNavigator nav in navigator.Select("//at:Name", manager))
{
var currValue = nav.Value;
nav.SetValue(currValue + " " + i);
}
doc.Save("test_" + i + ".xml");
}
最后,我希望它是:
<Items xmlns="http://foo.com/blah/blah">
<Item>
<Format>1</Format>
<Name>Edit this one 0</Name>
<MetaDataDictionary>
<MetaData>
<Name>Do not edit this one</Name>
<Value>0</Value>
</MetaData>
</MetaDataDictionary>
</Item>
<Item>
<Format>1</Format>
<Name>Edit this one 0</Name>
<MetaDataDictionary>
<MetaData>
<Name>Do not edit this one</Name>
<Value>0</Value>
</MetaData>
</MetaDataDictionary>
</Item>
</Items>
最佳答案
不要选择所有name
标记,而只能选择name
标记的子代/Items/Item
标记。
XPath查询看起来像/Items/Item/Name
。
您可以test it here。有关详细信息,请参见documentation。
关于c# - 当多个节点具有相同名称时,如何在XML中编辑特定节点的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56452169/