【发布时间】:2015-09-09 13:14:13
【问题描述】:
这是我正在使用的 XML。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<partners>
<access>1</access>
<partner>
<accessPass></accessPass>
<accessType>0</accessType>
<updated>1</updated>
<saved>0</saved>
<fingerPrint>...</fingerPrint>
<fpSent>0</fpSent>
<fpLength>1</fpLength>
<id>1234</id>
<idAsign>123456789</idAsign>//----->This is the value i want
<idCard>0</idCard>
<name>..</name>
<sku>531</sku>
<status></status>
<UserType>...</UserType>
</partner>
....
</partners>
我想从一个 XML 元素中选择一个特定的值,我有这个方法但是我无法检索到我想要的单个值。
public XElement GetValueByID(string xmlPath, string value, string Segment, string child, string clause)
{
XDocument xmlDoc = XDocument.Load(xmlPath);
XElement partnerValues = (from el in xmlDoc.Elements(Segment).Elements(child)
where el.Element(clause).Value == value
select el).FirstOrDefault();
return partnerValues;
}
在另一个类中,我循环所有“旧列表”以创建新列表;这就是我调用上述方法获取值的方式:
XElement userID = methodsXML.GetValueByID(rootPath,item.IdPartnerCard,"partners","partner","id");
if (userID != null){
idAsig = int.Parse(userID.Element("idAsign").Value.ToString());
}
到目前为止,此方法返回所有 XML 元素,然后我必须从元素中选择项目才能获得特定值,这会使我的程序变慢,因为我正在使用 > 10k regs。此外,我正在制作一个列表以使用 foreach 循环保存新的 XML。我希望有人可以帮助我解决这个问题。
感谢您的帮助。
【问题讨论】:
-
您的 XML 是什么样的?每次调用此方法时,您都会加载并查询文档 - 它被调用了多少次?
-
你为什么要传入
rutaPart,而实际上你并没有使用它?目前,你的问题真的很不清楚。 -
您是否考虑过使用 XPath 来查询您的 XML 文档?根据您的查询,使用起来可能要简单得多
-
对不起,我错过了输入“rutaPart”来更改变量名,是的,我每次循环时都会加载文件,我现在就修复它,谢谢你的建议。跨度>
标签: c# xml linq visual-studio-2010 foreach