我的逻辑如下:我想找到第一个缺少给定属性的元素,添加该属性,然后找到下一个缺少该元素的元素,将其添加,等等。
我找到第一个缺少数量属性的元素,方法如下:
private XmlNode GetFirstElementWithoutAmount()
{
string productXPathQuery = "//XML/Products";
XmlNodeList productList = ParentXmlDocument.SelectNodes(productXPathQuery);
foreach (XmlNode element in productList)
{
string passengerXPathQuery = "//XML/Products[ID=" + element.FirstChild.InnerText + "]/Amount";
var amount = element.SelectSingleNode(passengerXPathQuery);
if (amount == null)
{
return element;
}
}
return null;
}
当我发现缺少该属性的第一个元素时,将以以下方式添加金额:
private XmlNode GetOrCreateChildXMLNode(string NewNodeName, XmlNode ParentXMLNode)
{
if (ParentXMLNode == null)
{
return null;
}
XmlNode NewXMLNode = ParentXMLNode.SelectSingleNode("//" + NewNodeName);
if (NewXMLNode == null)
{
NewXMLNode = ParentXmlDocument.CreateNode(XmlNodeType.Element, NewNodeName, string.Empty);
ParentXMLNode.AppendChild(NewXMLNode);
}
return NewXMLNode;
}
问题在于,即使有更多元素要添加,它也只会添加到第一个元素,然后第一个函数总是返回第二个元素?任何想法为什么会这样?
答案 0 :(得分:0)
在//XML/Products
循环中,您已经在foreach
内部。直接指向子节点。
string passengerXPathQuery = "./Amount";