我正在尝试编辑 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
code> 节点,我不希望更新该值。我知道问题出在 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
标签,而只选择 /Items/Item
标签子级的 name
标签。
XPath 查询类似于 /Items/Item/Name
。
您可以test it here 。请参阅documentation了解详情。
关于c# - 当存在多个同名节点时,如何编辑 XML 中特定节点的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56452169/