我有所有这些XML记录都是用两种样式编写的,它们都包含相同的信息。
我是LinQ的新手,但我认为这个表达式只会使用name
属性。但它失败并返回true。
/* the failed query for the first Xml document */
/* I believed this said, find anything with a name attribute and return it's value */
public XDocument MyDocument= new XDocument().Load("this.xml");
List<string> allNames = MyDocument.Descendants()
.Where( a => a.Attribute("name") != null )
.Select( a => a.Value ).toList();
这是xml的两个版本
<RecListImgx>
<locale id="1033" />
<IMGPAK>
<img name="1033sm.jpg"/>
<img name="1033m.jpg"/>
<img name="1033r.jpg"/>
<img name="1033l.jpg"/>
</IMGPAK>
</RecListImgx>
<RecListImgx>
<locale id="1033" />
<IMGPAK>
<img>
<name> 1033sm.jpg </name>
</img>
<img>
<name> 1033s.jpg </name>
</img>
<img>
<name> 1033m.jpg </name>
</img>
<img>
<name> 1033l.jpg </name>
</img>
</IMGPAK>
</RecListImgx>
1。是否有一个查询可以从这两种XML样式中获取name
字段?
2。解析第一种类型的正确语法是什么?
我设法导航第二种形式就好了。但内联属性似乎无法找到名称属性
3。这些格式有何不同?
答案 0 :(得分:2)
是否有一个查询可以从这两种XML样式中获取名称字段?
是
List<string> allNames = MyDocument.Descendants("img")
// Look for a name attribute first; if there isn't one, find the name
// element instead.
.Select(a => (string) a.Attribute("name") ?? a.Element("name").Value)
.ToList();
解析第一种类型的正确语法是什么?我设法导航第二种形式就好了。但内联属性似乎无法找到名称属性。
您正在查找具有name属性的所有元素 - 但随后选择元素的值,而不是属性的值。见上文。
这些格式有什么不同?
一个有name
子元素,其值为文本节点,而另一个有name
属性,值为属性值。