如何使用linq搜索xml

时间:2013-10-15 08:39:00

标签: c# xml linq search nullreferenceexception

我想搜索我的xml文件。结构如下所示:

<AForetag xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Place ID="1006">
        <Foretag>
            <Epost>info@abc123.se</Epost>
            <Namn>Abe</Namn>
            <Ort>Abc123</Ort>
            <Adress>Abc123</Adress>
            <Postnummer>Abc123</Postnummer>
            <Landskap>Abc123</Landskap>
            <Telefon>Abc123</Telefon>
            <Medlemskap>Abc123</Medlemskap>
        </Foretag>
        <Foretag>
            <Epost>def456</Epost>
            <Namn>def456</Namn>
            <Ort>def456</Ort>
            <Adress>def456</Adress>
            <Postnummer>def456</Postnummer>
            <Landskap>def456</Landskap>
            <Telefon>def456</Telefon>
            <Medlemskap>def456</Medlemskap>
        </Foretag>
    </Place>
</Aforetag>

我想搜索元素<Landskap>。如果我得到并匹配,我应该选择所有其他元素,Epost,Namn,Ort,Adress,Postnummer,Landskap,Telefon和Medlemskap。我想要放入数组的信息。

我试过这个:

var aforetag = from foretag in doc.Descendants("Place")
                       where foretag.Attribute("ID").Value == "1006"
                       select foretag;


var landskap = aforetag.Elements("Foretag")
                       .Descendants()
                       .Where(x => x.Element("Landskap")
                       .Value
                       .Contains(s)
                       .Descendants()
                       .Select(c => (string)c)
                       .ToArray();

2 个答案:

答案 0 :(得分:0)

var landskap = aforetag.Elements("Foretag")
                       .Where(e=>e.Element("Landskap").Value.Contains(s))
                       .Select(e=>e.Elements().Select(x=>x.Value).ToArray());
//the result is an IEnumerable<string[]> for the matched keyword s

答案 1 :(得分:0)

您的代码格式不正确。将其复制到VS中并出现一些错误,修复一个或多个错误!...

最重要的是,您的XML不是XML,因为起始和结束标记甚至不匹配!另外,还有其他问题。

修复所有这些,我相信它会有所帮助。