【问题标题】:Get nested element Linq to XML获取嵌套元素 Linq to XML
【发布时间】:2014-06-11 19:30:09
【问题描述】:

我的 XML

<?xml version="1.0" encoding="utf-8"?>
<metadata created="2014-05-15T12:26:07.701Z" xmlns="http://site/cu-2.0#" xmlns:ext="http://site/cu/b-2.0">
  <customer-list count="47" offset="0">
    <customer id="7123456" type="Cust" ext:mark="1">
      <name>Tony Watt</name>
      <sort-name>Watt, Tony</sort-name>
      <gender>male</gender>
      <country>US</country>
      <knownAs-list>
        <knownAs locale="ko" sort-name="Tony Watt"</knownAs>
        <knownAs locale="ja" sort-name="Watt Tony"</knownAs>
      </knownAs-list>
      <tag-list>
          <begin>Country</begin>
          <tag count="1">
          <name>usa</name>
      </tag-list>
 </customer>
  <customer id="9876543" type="Cust" ext:mark="2">
....
</customer-list>

所以我有一些代码可以获取所有数据。我更进一步使用匿名类型并将值添加到一个类中,如下所示

Dim c = From cust As XElement In XDoc.Descendants(ns + "customer")
              Select New Customer() With {.Name = cust.Element(ns + "name"),
                                        .Surname = CStr(cust.Element(ns + "surname")),
                                        .Id = cust.Attribute("id"),
                                        .Tag = CStr(cust.Element("tag-list").Element("begin"))}

上面的代码从XML返回数据,但是添加了这行代码

.Tag = CStr(cust.Element("tag-list").Element("begin"))

抛出异常,“对象引用未设置为对象的实例”。现在这里有两种可能

  1. 我的代码对于该特定行有误(从 'tag-list' 元素中检索 'begin')
  2. 我知道一些标签列表元素没有嵌套的开始元素,因此可能会增加一些混乱。我添加了 Cstr 来克服这个问题,但不确定这是否足够?

阅读 MSDN 后,似乎使用 .Descendants (Xdoc.Descendants) 会从 Elements 将数据返回到我所说的路径的所有元素中获取所有数据,据我所知,数据“应该”是可用上面的代码。谁能帮我从标签列表中获取开始数据?

【问题讨论】:

  • 您确定标签元素有效吗?我在那里看不到结束标签
  • 是的,很抱歉,我注意到我没有正确添加/格式化我现在更改的 XML
  • 您可能要考虑使用 XPath:stackoverflow.com/questions/3642829/…

标签: vb.net linq linq-to-xml


【解决方案1】:

缺少 XML 命名空间声明。使用

.Tag = CStr(cust.Element(ns + "tag-list").Element(ns + "begin"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多