1

テンプレートからいくつかの xml ノードをコピーして、それらを別の xml に配置しようとしています。xml の構造は次のとおりです。

<grandparent>
    <parent>
        <children>
            <grandchildren/>
        </children>
        <children>
            <grandchildren/>
        </children>
        <children>
            <grandchildren/>
        </children>
    </parent>
    <parent>
        <children>
            <grandchildren/>
            <grandchildren/>
            <grandchildren/>
        </children>
        <children>
            <grandchildren/>
            <grandchildren/>
            <grandchildren/>
        </children>
        <children>
            <grandchildren/>
            <grandchildren/>
            <grandchildren/>
        </children>
    </parent>
</grandparent>

2 番目の親と選択した子をトラバースして、すべての孫を取得することは可能ですか?そして、すべての孫を別の xml ファイルに挿入しますか?

4

2 に答える 2

2

次のように実行できます。

        string input = @"<grandparent>
            <parent>
                <children>
                    <grandchildren/>
                </children>
                <children>
                    <grandchildren/>
                </children>
                <children>
                    <grandchildren/>
                </children>
            </parent>
            <parent>
                <children>
                    <grandchildren id=""1""/>
                    <grandchildren id=""2""/>
                    <grandchildren id=""3""/>
                </children>
                <children>
                    <grandchildren id=""4""/>
                    <grandchildren id=""5""/>
                    <grandchildren id=""6""/>
                </children>
                <children>
                    <grandchildren id=""7""/>
                    <grandchildren id=""8""/>
                    <grandchildren id=""9""/>
                </children>
            </parent>
        </grandparent>";

        XDocument doc = XDocument.Parse(input);
        // Use XDocument.Load method to load XML content from file
        //XDocument doc = XDocument.Load(<filepath>);

        IEnumerable<XElement> elements = doc
            .Root
            .Elements("parent")
            .ElementAt(1)
            .Descendants("grandchildren");

        XElement rootElement = new XElement("rootElement");
        rootElement.Add(elements);

        rootElement.Save(@"C:\Doc2.xml");

あなたが投稿した XML は単なるフラグメントではなく、解析したい XML コンテンツ全体であると思います。ここでトリッキーな部分は、要素の序数で要素にアクセスしていることです。要素のある種の ID 属性によって行う必要があるため、序数の位置に従って要素を取得するメソッドをparent使用する代わりに、ID を比較することでアクセスできます。ElementAt. id属性を追加して、要素が最初の要素ではなく2 番目の要素に属しているgrandchildrenことがわかるようにしました。grandchildrenparent

于 2012-08-24T08:00:44.977 に答える
0
 XElement doc = XElement.Load("c:\\yourXML.xml");
 XElement newdoc = new XElement("GrandChildren");
 foreach (XElement x in doc.Descendants("parent").Skip(1).Descendants("children").Descendants("grandchildren"))
 {
       newdoc.Add(x);
 }

これで、newDocに必要なXMLが含まれます。

于 2012-08-24T08:12:32.643 に答える