使用XDOCUMENT和LINQ(C#)从xml中提取信息

菲奥娜

考虑以下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?

谢尔盖·别列佐夫斯基(Sergey Berezovskiy)

使用强制转换节点,而不是直接访问值。如果未找到节点,则在读取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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用python从多个XML节点和层次结构中提取信息?

来自分类Dev

使用OPEN XML从数据存储中提取信息

来自分类Dev

使用PHP从XML文档的属性中提取信息

来自分类Dev

使用wget和Perl脚本从网页中提取信息

来自分类Dev

从大型XML文件中提取信息

来自分类Dev

使用RegExp从Whois中提取信息

来自分类Dev

使用Jsoup从页面中提取信息

来自分类Dev

使用敲除从数组中提取信息

来自分类Dev

使用C#和XML(XDocument)的“:”错误

来自分类Dev

从字典中提取信息

来自分类Dev

从日志中提取信息

来自分类Dev

从文件中提取信息

来自分类Dev

从列中提取信息

来自分类Dev

从文本中提取信息

来自分类Dev

使用jquery从Itunes热门歌曲rss feed(xml)中提取信息

来自分类Dev

从xml格式的输入元素中提取信息

来自分类Dev

从 XML 中提取信息到 SQL Server 临时表

来自分类Dev

使用AWK和PATTERN提取信息

来自分类Dev

使用linq从xml获取信息

来自分类Dev

从冒号分隔的.txt文件中提取信息,C ++

来自分类Dev

使用awk从vcf文件中提取信息

来自分类Dev

如何使用NLP库从报纸文章中提取信息?

来自分类Dev

在Perl中使用Regex从用户输入中提取信息

来自分类Dev

使用python 2.7 / pyMel从Excel中提取信息?

来自分类Dev

如何使用javascript从HTML中提取信息

来自分类Dev

如何使用jq从github api中提取信息字段

来自分类Dev

如何使用jq从github api中提取信息字段

来自分类Dev

如何使用NLP库从报纸文章中提取信息?

来自分类Dev

使用Qt Creator从网页的源代码中提取信息