如何改进Xdocument的循环

本文关键字:循环 Xdocument 何改进 | 更新日期: 2023-09-27 18:01:33

我正在做一个关于如何阅读c#和linq和.xml文件的例子,我读了它,但我认为代码不好。

任何建议,或解释如何做得更好是欢迎的。

XML:

<file>
 <order>
  <products>
    <product>
     <id>123</id>
     <Description>Camera</Description>
     <seller>Website</seller>
    </product>
    <product></product>
    <product></product>
  </products>
 </order>
</file>

这是我的代码,我想改进的部分采取描述,这种方式看起来不太好。

var reader = XDocument.Load("file.xml");
var listProdcutsNodes = reader.Element("file").Element("order").Element("products").Elements("product").Select(input => input.Elements()).ToList();
var description = "";
foreach (var listProdcutsNode in listProdcutsNodes)
{
    var isproduct = false;
    foreach (var xElement in listProdcutsNode)
    {
        if (xElement.Name == "id" && xElement.Value == "123")
        {
            isproduct = true;
        }
        if (isproduct && xElement.Name == "Description")
        {
            description = xElement.Value;
        }
    }
    isproduct = false;
}

如何改进Xdocument的循环

获取所有节点作为列表并遍历它们在您的情况下是多余的。

你可以很容易地得到这个描述,像这样:

string myID = "123";
var description = reader.XPathSelectElements("/file/order/products/product")
                .Where(x => x.Element("id").Value == myID)
                .Select(x => x.Element("Description").Value).FirstOrDefault();

您可以使用Linq,或者只是常规的XPath。这是xml的xpath:

//product[./*[text()='123']]/Description/text()