C# Linq到XML查询从XML创建空项
有人能解释一下为什么是xml吗C# Linq到XML查询从XML创建空项,c#,vb.net,linq-to-xml,C#,Vb.net,Linq To Xml,有人能解释一下为什么是xml吗 <?xml version="1.0" encoding="utf-8"?> <items> <item id="77" cityID="EE12345" cityDatum="15.2.2010. 11:28:35" /> </items> 结果是(myStorage的)列表中有两个项——一个是所有空(nothing)属性,另一个是上面xml中的值 我通过添加 Where items.@id IsNot No
<?xml version="1.0" encoding="utf-8"?>
<items>
<item id="77" cityID="EE12345" cityDatum="15.2.2010. 11:28:35" />
</items>
结果是(myStorage的)列表中有两个项——一个是所有空(nothing)属性,另一个是上面xml中的值
我通过添加
Where items.@id IsNot Nothing _
在选择新的myStorage之前,但我觉得我不应该这么做
我在C#中重新创建了这个,storage.xml与上面指定的完全相同
private void Form1_Load(object sender, EventArgs e)
{
XDocument st;
st = XDocument.Load("C:\\storage.xml");
Object c = from items in st.Descendants()
select new {id = items.Attribute("id"), cityID = items.Attribute("cityID"), cityDatum = items.Attribute("cityDatum")};
}
如果您无法复制这些结果,这里有一个屏幕截图:
从更新的代码示例中获取。当你说
st = XDocument.Load("C:\\storage.xml");
然后
st.Descendants()
您的st
是文档,而不是根元素。因此,当您向它请求其子体时,您将枚举2XElement
s–此示例中的项
节点和一个项
节点。正是items
节点为您提供了“空”项
有很多方法可以将自己限制在项
节点上,这取决于您对xml结构的把握程度,例如
From item In st.Root.Elements("item")
将仅枚举作为文档根元素的直接子元素的项
节点。我已经尝试过这一点(在C#中承认),并且在存储
中只得到一个项,无论是否有Where
子句。你能给我们展示一个简短但完整的程序(la)来演示这个问题吗?我已经用C#示例和截图扩展了这个问题,谢谢。我必须承认一个例外会很好,因为我在这件事上完全迷失了方向。
From item In st.Root.Elements("item")