我需要将xml转换为字典。我以前从未这样做过。你能告诉我一个代码示例如何将这个xml转换为字典来获取这样的值:
Key: Vendor and Value: BankRed
Key: CustRef and Value: dfas16549464
Key: InvP and Value: 1, 12
这是xml:
<root>
<Vendor name = "BankRed">
<CustRef>dfas16549464</CustRef>
<InvP> 1, 12</InvP>
</Vendor>
</root>
我们将不胜感激。非常感谢!
答案 0 :(得分:1)
我认为您可以做一些澄清,但这可以达到预期的效果,假设供应商属性名称应该是供应商部分的密钥,尽管您还不清楚
XDocument xml = XDocument.Load("path to your xml file");
var dict = xml.Descendants("Vendors")
.Elements()
.ToDictionary(r => r.Attribute("name").Value, r => r.Value);
假设有一个XML结构:
<root>
<Vendors>
<Vendor name="BankRed">
<CustRef>dfas16549464</CustRef>
<InvP> 1, 12</InvP>
</Vendor>
</Vendors>
<Vendors>
<Vendor name="BankBlue">
<CustRef>foo</CustRef>
<InvP>bar</InvP>
</Vendor>
</Vendors>
</root>
您将获得一个Dictionary<string, string>
,其中包含两个如下所示的元素: -
但是,我认为你采取了错误的做法。更好的想法是创建一个自定义类型Vendor
来存储此信息,例如:
public class Vendor
{
public Vendor()
{ }
public string CustRef { get; set; }
public string VendorName { get; set; }
public string InvP { get; set; }
}
查询将变为:
var query = (from n in xml.Descendants("Vendors")
select new Vendor()
{
VendorName = n.Element("Vendor").Attribute("name").Value,
CustRef = n.Descendants("Vendor").Select(x => x.Element("CustRef").Value).SingleOrDefault(),
InvP = n.Descendants("Vendor").Select(x => x.Element("InvP").Value).SingleOrDefault()
}).ToList();
这将为您提供如下所示的Vendor
列表:
现在数据更容易使用。
答案 1 :(得分:0)
我写了一段代码并对其进行了测试。我希望这就是你所需要的,尽管你的问题并不清楚你为什么需要它: 使用字典的类Entity:
公共类实体 { 私有字符串CustRef; 私有字符串InvP;
public Entity(string custRef, string invP)
{
CustRef = custRef;
InvP = invP;
}
}
和转换代码:
Dictionary<string, Entity> myTbl = new Dictionary<string, Entity>();
XmlDocument doc = new XmlDocument();
doc.Load(@"d:\meXml.xml");
XmlNode root = doc.FirstChild;
foreach (XmlNode childNode in root.ChildNodes)
{
myTbl[childNode.Attributes[0].Value] = new Entity(
childNode.FirstChild.InnerText,
childNode.LastChild.InnerText);
}
答案 2 :(得分:-3)
尝试使用以下代码:
Dictionary<int, string> elements = xml.Elements(ns + "root")
.Select(sp => new {
CustRef = (string)(sp.Attribute("CustRef")),
vendor = (string)(sp.Attribute("Vendor"))
})
.ToDictionary(sp => sp.CustRef, sp => sp.Vendor);