【问题标题】:LINQ Parsing XMLLINQ 解析 XML
【发布时间】:2012-03-15 23:51:35
【问题描述】:

给出这个 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>

我在 item-info 节点中的属性之后,特别是每个属性的最后一个值。更重要的是,我只需要 6 个属性中的 4 个。我整天都在敲这个。我把那个 xml 放到一个 XElement 中,我们称之为信息。当我写这个时:

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

此时我可以看到所有六个 item-name... 行。目的是我想获取这些值并将它们放入一个类对象中。粗略的伪编码期望的结果是......

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

我似乎无法按摩 LINQ 查询来做我需要的事情。

【问题讨论】:

  • xml 无效...这些应该是什么? &lt;item-name="item-model" label="Item Model" value="Super Spuds" /&gt;元素没有名字,只有一堆属性!?
  • 是的,没错。我应该提到的。这是一个传递的 xml sn-p。最终它最终与其他 sn-ps 合并。我只是在劫持 sn-p 以获得所需的东西。

标签: c# xml linq


【解决方案1】:

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

类似的东西

&lt;item-name="item-model" label="Item Model" value="Super Spuds" /&gt;

不允许。如果要在元素内存储文本,请使用:

&lt;item-name label="Item Model" value="Super Spuds"&gt;item-model&lt;/item-name&gt;

但是,如果您将 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
            };

【讨论】:

  • 这让我上路了,非常感谢 the_joric。我解决了上面的 xml 问题。测试了代码,它给了我我需要的东西。
猜你喜欢
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 2015-04-17
  • 2012-05-29
  • 1970-01-01
相关资源
最近更新 更多