使用XPath向多个元素添加元素无法正常工作

时间:2019-12-05 23:57:20

标签: c# xml xpath

我的逻辑如下:我想找到第一个缺少给定属性的元素,添加该属性,然后找到下一个缺少该元素的元素,将其添加,等等。

我找到第一个缺少数量属性的元素,方法如下:

    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;
        }

问题在于,即使有更多元素要添加,它也只会添加到第一个元素,然后第一个函数总是返回第二个元素?任何想法为什么会这样?

1 个答案:

答案 0 :(得分:0)

//XML/Products循环中,您已经在foreach内部。直接指向子节点

string passengerXPathQuery = "./Amount";