考虑以下xml文件:
<UPDATES xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<EXAMPLES>
<EXAMPLE>
<EXAMPLEID>1234</EXAMPLEID>
<TYPES>
<TYPE>
<TYPEID>0</TYPEID>
<FILES>
<FILE>
<FILENAME>fileName1</FILENAME>
<URL>http://somehwere</URL>
<MD5>2d774faa197fe87a49db0709048b82f0</MD5>
</FILE>
<FILE>
<FILENAME>fileName2</FILENAME>
<URL>http://somehwere</URL>
<MD5>1232132135a4dfseaf321daf51eaf321</MD5>
</FILE>
</FILES>
</TYPE>
</TYPES>
</EXAMPLE>
<EXAMPLE>
<EXAMPLEID>5678</EXAMPLEID>
<TYPES>
<TYPE>
<TYPEID>0</TYPEID>
<FILES>
<FILE>
<FILENAME>fileName3</FILENAME>
<URL>http://somehwere</URL>
<MD5>1232132135a4dfseaf321daf51eaf321</MD5>
</FILE>
<FILE>
<FILENAME>fileName4</FILENAME>
<URL>http://somehwere</URL>
<MD5>1232132135a4dfseaf321daf51eaf321</MD5>
</FILE>
</FILES>
</TYPE>
</TYPES>
</EXAMPLE>
</EXAMPLES>
我想提取文件名和md5,但仅提取一个特定的exampleid。
到目前为止,我想要提取的信息是:
var files = xDocument.Descendants("FILE")
.Select(
node => new {FileName = node.Element("FILENAME"), Hash = node.Element("MD5")})
.Distinct();
这将返回包含标签的信息。如果我执行一个node.Element(“ FILENAME”)。Value,我将得到一个null引用异常。
它正在尝试添加我遇到问题的Where子句。
如何指定仅返回与exampleid 1234相关的文件名和md5?
使用强制转换节点,而不是直接访问值。如果未找到节点,则在读取Value属性时会得到NullReference异常。但是,在将节点强制转换为字符串或可为空的类型时,您只会得到null。这是完整的查询:
var files = from e in xDocument.Descendants("EXAMPLE")
where (int)e.Element("EXAMPLEID") == exampleId
from f in e.Descendants("FILE") // get files of particular example
select new {
FileName = (string)f.Element("FILENAME"),
Hash = (string)f.Element("MD5")
};
例如,等于5678
它的exampleId返回:
{ FileName = fileName3, Hash = 1232132135a4dfseaf321daf51eaf321 }
{ FileName = fileName4, Hash = 1232132135a4dfseaf321daf51eaf321 }
与流利的语法相同:
var files = xDocument.Descendants("EXAMPLE")
.Where(e => (int)e.Element("EXAMPLEID") == exampleId)
.Descendants("FILE")
.Select(f => new {
FileName = (string)f.Element("FILENAME"),
Hash = (string)f.Element("MD5")
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句