C# LINQ TO XML属性标记未给出对象引用错误
嗨,我做的如下C# LINQ TO XML属性标记未给出对象引用错误,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,嗨,我做的如下 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
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
};
当我使用
其中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>
abc
def
5.
1234
0
有人能告诉我这个问题,我该如何解决,我可以只使用元素标记而不是属性吗。谢谢使用强制转换而不是访问
值
属性。转换为字符串将为不存在的元素返回null。获取值
将引发异常
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")
};
顺便说一句,您需要
的结束标记。另外,LS_CZIP4
是元素,而不是属性。看到这里的区别了吗
元素:abc
属性:
您能解释一下LS\u CZIP在这里是元素而不是属性吗?如果我们必须查询xml,可以使用元素而不是属性吗file@ffayyaz我添加了LS_LIN作为属性和元素的示例。如果项目是xml中的属性,则应该查询属性。若项为元素,则查询元素。基于xml结构生成查询。谢谢,我的xml结构很好,因为我有一个名为autoivr的表。好的,表有多个列和行,所以表中的每一列都表示为xml文件中的一个元素,依此类推。@ffayyaz实际上我将使用autroivrs
作为根元素,为每行使用autoivr
子元素。但是您当前的xml结构也可以工作