如何改进循环 Xdocument
How to improve loop Xdocument
我正在做一个关于如何使用 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;
}
将所有节点作为列表并对其进行迭代在您的情况下是多余的。
您可以像这样很容易地获得该描述:
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()
我正在做一个关于如何使用 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;
}
将所有节点作为列表并对其进行迭代在您的情况下是多余的。
您可以像这样很容易地获得该描述:
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()