有人可以解释为什么这个xml
<?xml version="1.0" encoding="utf-8"?>
<items>
<item id="77" cityID="EE12345" cityDatum="15.2.2010. 11:28:35" />
</items>
使用查询时
Dim c = From items In st.Descendants _
Where items.@id IsNot Nothing _
Select New myStorage With {.id = items.@id, .cityID = items.@cityID, .cityDatum = items.@cityDatum}
storage = c.ToList
导致列表(myStorage)有两个项目 - 一个具有所有空(无)属性,第二个具有在上面的xml中看到的值?
我已经通过添加
解决了这个问题Where items.@id IsNot Nothing _
在Seletct New 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")};
}
如果您有些人无法复制这些结果,请点击此处截图:
答案 0 :(得分:0)
从您更新的代码示例中获取。当你说
st = XDocument.Load("C:\\storage.xml");
然后
st.Descendants()
您的st
是文档,而不是根元素。因此,当您向其Descendants
询问时,您枚举 2 XElement
s - items
节点和此示例中的一个item
节点有。 items
节点为您提供“空”项目。
有很多方法可以将自己限制在item
个节点,具体取决于您对xml结构的确定程度 - 例如,
From item In st.Root.Elements("item")
将枚举 item
个节点,这些节点被视为文档根元素的直接子节点。