LINQ Parsing XML

本文关键字:XML Parsing LINQ | 更新日期: 2023-09-27 18:28:09

给出这个xml结构:

    <store-fax-info>
      <store-info store-status="1" store-service-type="2">
        <store-guid>blah-blah-blah-blah</store-guid>
        <store-name>Avacados R Us</store-name>
        <phone>555-555-5555</phone>
        <fax>123-456-789</fax>
        <attention>Rockhead Rumble</attention>
      </store-info>
      <selected-clerk>
        <clerk-info guid="x">
          <clerk name="full-name" label="Clerk Name" value="" />
        </clerk-info>
        <item-info>
          <item-name="item-model" label="Item Model" value="Super Spuds" />
          <item-name="item-model-num" label="Model Number value="55555" />
          <item-name="family" label="Veggie Family" value="Tuber" />
          <item-name="serial-number" label="Serial Number" value="ABC123456A" />
          <item-name="date-checked" label="Last Date Checked" value="Mar 15 2012 11:00AM" />
          <item-name="item-weight" label="Weight" value="20lbs />
        <item-info>
      </selected-clerk>
    </store-fax-info>

我在寻找项目信息节点中的属性,特别是每个属性的最后一个值。关键是,我只需要6个属性中的4个。我一整天都在努力。我把xml放入XElement中,称之为info。当我写这篇文章时:

    var query = from i in info.Elements("item-info")
                from j in i.Elements()
                select j;

在这一点上,我可以看到所有六个项目名称。。。线目的是我想获得这些值,并将它们放入一个类对象中。粗略地伪编码,期望的结果是…

    select new MyObject()
    {
        Product = query.SuperSpuds,
        Number = query.55555,
        SerialNumber = query.ABC123456A,
        CheckedDate = query.Mar 15 2012 11:00AM,
    }

我似乎无法通过LINQ查询来完成我需要的操作。

LINQ Parsing XML

首先,您的xml格式不正确。

之类的东西

<item-name="item-model" label="Item Model" value="Super Spuds" />

不允许。如果您想在元素中存储文本,请使用以下内容:

<item-name label="Item Model" value="Super Spuds">item-model</item-name>

但是,如果您将XML更改为有效的XML,以下代码可能会对您有所帮助:

var xElements = xElement.Descendants("item-name").Attributes("value").ToList();
var o = new MyObject()
            {
                Product = xElements[0].Value,
                Number = xElements[1].Value,
                SerialNumber = xElements[2].Value,
                CheckedDate = xElements[3].Value
            };