0

嗨,我正在做如下

 XDocument xmlDoc = XDocument.Load(@"F:\test2.xml");
        var q = from c in xmlDoc.Descendants("autoivr.ok")
                where c.Element("LS_CZIP4").Value == "1234"
                select new
                {
                    name = c.Element("LS_LIN").Value,
                    state = c.Element("LS_STATE").Value                        
                };

当我使用 where c.attribute("LS_CZIP4").Value == "1234" 我得到未设置对象引用的错误但是当我使用 c.element 时没有这样的错误。

以下是我制作的 xml,它实际上是 sql 中转换为 xml 文件的表

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
   <autoivr.ok>
      <LS_LIN>abc</LS_LIN>
      <LS_STATE>def</LS_STATE>
      <LS_TYPE>5</LS_TYPE>
      <LS_CZIP4>1234</LS_CZIP4>
   <priority>0</priority>
   </autoivr.ok>

有人可以让我知道这个问题吗?我该如何解决?我可以只使用元素标签而不是属性。谢谢你

4

1 回答 1

2

使用强制转换而不是访问Value属性。转换为字符串将为不存在的元素返回 null。获取Value会抛出异常

XDocument xmlDoc = XDocument.Load(@"F:\test2.xml");
var q = from c in xmlDoc.Descendants("autoivr.ok")
        where (string)c.Element("LS_CZIP4") == "1234"
        select new
        {
            name = (string)c.Element("LS_LIN"),
            state = (string)c.Element("LS_STATE")
        };

顺便说一句,您需要结束标记<DocumentElement>. 也是LS_CZIP4元素,而不是属性。请参阅此处的区别XML Elements vs. Attributes

元素:<LS_LIN>abc</LS_LIN>

属性:<autoivr.ok LS_LIN="abc">

于 2013-01-16T09:44:18.370 回答