0

我知道关于这个主题有很多问题,但我尝试过的例子都没有对我有用。

我有一个现有的 XML 文档,其构造如下:

<root>
    <ElementA>
        <element1>sometext</element1>
        <element2>sometext</element2>
        <element3>sometext</element3>
    </ElementA>

    <ElementA>
        <element1>sometext</element1>
        <element2>sometext</element2>
        <element3>sometext</element3>
    </ElementA>

    <ElementB>
        <element1>sometext</element1>
        <element2>sometext</element2>
        <element3>sometext</element3>
        <element4>sometext</element4>
        <element5>sometext</element5>
    </ElementB>

    <ElementB>
        <element1>sometext</element1>
        <element2>sometext</element2>
        <element3>sometext</element3>
        <element4>sometext</element4>
        <element5>sometext</element5>
    </ElementB>

    <ElementC>
        <element1>sometext</element1>
        <element2>sometext</element3>
    </ElementC>

    <ElementC>
        <element1>sometext</element1>
        <element2>sometext</element2>
    </ElementC>
</root>

我需要找到所有 ElementA、B 和 Cs,并创建一个 objA 等类型的新对象,其属性对应于各个元素的子元素。下面是我尝试过的示例代码。

var doc = XElement.Load(filename);
var data = from ele in doc.Elements()
           where ele.Name.LocalName.Equals("ElementA")
           select new objA
           {
                name = ele.Element("element1").Value
                address = ele.Element("element2").Value
           };

但是,当我尝试遍历“数据”集合时,这会引发空异常错误。我不明白什么?

4

1 回答 1

1

您可以使用以下方法按名称获取元素Elements("tagName")

var data = from ele in doc.Elements("ElementA")
           select new objA
           {
               name = (string)ele.Element("element1"),
               address = (string)ele.Element("element2")
           };

您还应该使用(string)XElementInstance而不是XElementInstance.Value,以避免NullReferenceExceptionXML 中不存在元素。

上面粘贴的代码为您的示例输入数据返回 2 个元素。

于 2013-03-24T14:25:38.763 回答