c# - 当有多个同名节点时,如何在 XML 中编辑特定节点的值?
问题描述
我正在尝试编辑 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>
解决方案
推荐阅读
- sql - SQL 筛选前 1 行
- angular - ng add @angular/fire 错误无法在非交互模式下运行登录
- regex - 正则表达式 - 在最后一个 / 之后获取字符串,如果该字符串包含某些内容(用户输入)
- reactjs - 将对象数组作为道具传递给 List 组件,并使用 map 方法对其进行迭代。但出现错误:无法设置未定义的属性“道具”
- javascript - Android:下载 JS 包后应用程序崩溃
- batch-file - 批量使用命令行参数的 if 语句
- java - 使用axis2生成时自定义Web服务的端点?
- reactjs - console.log 未显示 useState 信息
- junos-automation - textfsm 使用 junos 设置策略解析多行
- postgresql - 如何在 Kubernetes 集群中将 Openkm 与 postgres 集成