如何使用linq从xml元素中选择id
本文关键字:选择 id 元素 xml 何使用 linq | 更新日期: 2023-09-27 17:59:07
这就是我正在使用的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。我希望有人能在这个问题上帮助我。
谢谢你的帮助。
也许这会很有用:
XDocument doc = XDocument.Load("partners.xml");
XElement root = doc.Root;
var id = from el in root.Elements("partner").Elements("idAsign") select el;
foreach (var el in id)
{
comboBox1.Items.Add(el.Value.ToString());
}
我知道这不适合您的代码(comboBox),但我想展示如何获取"idAsign"节点的值。
基本上,它所做的一切,都得到了"idAsign"的所有价值。如果你把它们列在清单上,很容易找到具体的。
这在LinqPad中有效。。。
void Main()
{
XDocument doc= XDocument.Load(@"d:'test2.xml");
XmlNamespaceManager xnm = new XmlNamespaceManager(new NameTable());
GetElement(doc, "//partners/partner/idAsign", xnm).Dump();
}
public IEnumerable<XElement> GetElement(XDocument doc, string xpath, IXmlNamespaceResolver res)
{
return doc.XPathSelectElements(xpath, res);
}
只需获取特定节点,然后在调用以<idAsign>12345</idAsign>
等XML格式获取节点的方法后获取值,就很容易了
如下
public XElement GetValuePartnerByID(string rutaPart, string id, string node)
{
XDocument archivoXML = XDocument.Load(rutaPart);
XElement valuePart = (from c in archivoXML.Elements("partners").Elements("partner")
where c.Element("id").Value == id
select c.Element(node)).FirstOrDefault();
return valuePart;
}
然后
XElement userID = metodosXML.GetValuePartnerByID(path, item.IdPartnerCard, "idAsign");
idAsig = int.Parse(userID.Value.ToString());
感谢