0

属性 nodeName="Industries" を持つ SectionIndex を見つけて、その SectionIndex の各 Textpage 要素の属性 (id と nodeName) を取得する必要があります。

   <SectionIndex nodeName="Industries">
       <Textpage id="1" nodeName="Aerospace"</Textpage>
       <Textpage id="2" nodeName="Construction"</Textpage>
       <Textpage id="3" nodeName="Engineering"</Textpage>
    </SectionIndex>
    <SectionIndex nodeName="Greetings">
       <Textpage id="1" nodeName="Hello"</Textpage>
       <Textpage id="2" nodeName="GoodBye"</Textpage>
       <Textpage id="3" nodeName="Later"</Textpage>
    </SectionIndex>

私のクエリは次のようになります

    var queryServices = from s in xmldoc.Root.Descendants("SectionIndex")
                            where s.Attribute("nodeName").Value == "Industries"                                    
                            select new
                            {
                                ServicesKey = s.Element("umbTextpage").Attribute("id").Value ?? "",
                                NodeName = s.Element("umbTextpage").Attribute("nodeName").Value ?? ""
                            };

航空宇宙のみを返します。どんなヒントも素晴らしいでしょう。

4

3 に答える 3

0

あなたの問題はs、それぞれがである値を循環しているということですSectionIndexが、あなたは子供たちにもっと興味があります。

あなたは子供の観点からそれを書き直すことができます:

var queryServices =
    from s in xmldoc.Root.Descendants("Textpage")
    where s.Parent.Attribute("nodeName").Value == "Industries"
    select new
        {
            ServicesKey = s.Attribute("id").Value ?? "",
            NodeName = s.Attribute("nodeName").Value ?? ""
        };

または、2つのクエリに分割することもできます。1つSectionIndexは関心のあるクエリを取得するためのもので、もう1つはその子を抽出するためのクエリです。

于 2012-10-12T22:04:21.023 に答える
0

手伝ってくれてありがとう。どうやら、解析しようとしている 5000 行の構成ファイルに必要な情報が 1 つ欠けていたようです。

    <root id="-1">
    <SectionIndex id="0" nodeName="Greetings">
         <Textpage id="1" nodeName="Hello"></Textpage>
         <Textpage id="2" nodeName="GoodBye"></Textpage>
         <Textpage id="3" nodeName="Later"></Textpage>
    </SectionIndex>
    <Textpage id="4" nodeName="Services">
        <SectionIndex nodeName="Industries">
             <Textpage id="5" nodeName="Aerospace"></Textpage>
             <Textpage id="6" nodeName="Construction"></Textpage>
             <Textpage id="7" nodeName="Engineering"></Textpage>
        </SectionIndex>
    </Textpage>
    </root>

そのため、提案されたクエリを実行しようとすると、nodeName を持たないルートへの場所の部分で null 例外エラーが返されました。属性 nodeName="Industries" を使用して SectionIndex を検索し、その SectionIndex 内の各 Textpage 要素の属性 (id および nodeName) を取得する方法に関するアイデア。

于 2012-10-15T15:51:11.773 に答える
0
 var result = xDoc.Descendants("SectionIndex")
            .Where(e => e.Attribute("nodeName").Value == "Industries")
            .SelectMany(e => e.Descendants()
                                 .Select(x => new
                                     {
                                         ServicesKey = x.Attribute("id").Value,
                                         NodeName = x.Attribute("nodeName").Value
                                     }));
于 2012-10-15T16:04:32.213 に答える