我有一个像这样的xml文件:
<root>
<sub>
<name>Al</name>
<code>001</code>
</sub>
<sub>
<name>John</name>
<code>002</code>
</sub>
和List<string> lName= new List<string>(new string[] { "Jack", "John"});
我想编辑“John”节点,添加“Jack”节点并按原样保留“Al”节点。我做的是:
System.Xml.XmlNodeList nodeNameList = FileXml.SelectNodes(@"//*[contains(name(),'name')]");
foreach (string name in lName)
{
System.Xml.XmlNode nodeName=FileXml.SelectSingleNode("//root/sub/name");
if (nodeName.InnerText == name)
{
//add
}
else
{
//edit
}
但它不起作用。我认为XmlNodeList可以作为普通列表使用,但事实并非如此。有人能帮助我吗?
答案 0 :(得分:1)
您可以将xml加载到Document
中,然后将Descendants
与节点名一起使用,然后使用Where
对其应用Contins
过滤器。你可以尝试这样的事情,
XDocument xmlDocument = XDocument.Load(@"yourxmlpath.xml");
var result = xmlDocument.Descendants("sub")
.Where(x => lName.Contains(x.Element("name").Value)).ToList();
答案 1 :(得分:0)
你在这里遇到了几个问题。
首先,您将XmlNode与使用以下代码的字符串进行比较:
if (nodeName == name)
永远不会评价为真。你想要像
这样的东西if (nodeName.InnerText == name)
对于你的添加逻辑,你需要创建一个新的XmlNode并附加它(参见https://msdn.microsoft.com/en-us/library/system.xml.xmlnode.appendchild%28v=vs.110%29.aspx)。对于更新逻辑,只需在节点上设置InnerText属性。