2017-07-12 13 views
-3

未知の量の他の要素の中に入れ子になっているXML要素を参照したいと考えています。例えば
、私はこのようなXMLファイルがある場合:未知の量の他の要素内でネストされたXML要素を参照する方法

<root> 
    <Example> 
    </Example> 
</root> 

を私は<Example>要素内の要素を追加します。私はルート要素の中に要素を追加すると、私はこの(Docと仮定すると、すでに定義されてXDocumentである)のようにそれを行うことができます。

Doc.Element("root").Add(new XElement("Example")); 

と2がある場合は、私が行うことができます。

Doc.Element("root").Element("Example").Add(new XElement("newExample")) 

これを私がハードコードすることができるので、どの要素が何の中にあるのか正確に分かっていればうまく動作します。しかし、私は何の要素が何になるのか分からないときにはうまくいかない。

私のプロジェクトは、仮想フォルダシステムです(thisを読んだ方が意味があります)ので、どの要素が何の中に入れ子になるのか分かりません。私はList<string>のディレクトリ内にディレクトリを保存することを考えましたが、それはディレクトリを格納するために働いていますが、要素を参照する方法を知っている唯一の方法はすべての要素をハードコードすることです。 XElement.Add()のようなメソッドを使うことができるように、他の要素にネストされた要素をすべての親要素をハードコードすることなく参照できる方法はありますか?

+0

回答は*質問に答えます。なぜそれがうまくいかないのかという説明なしではないと述べると、非常に混乱します(しかしかなり伝統的です - 私はOPのコメントを "いいえ、私は別のものが必要です"と言っているのが一般的です。そのようなコメントは有用ではない)。 –

+0

@AlexeiLevenkov彼は、子孫の方法がうまくいくと言います、大丈夫です!私はそれをどのように実装するのか、それを使うのか分からないなら、その知識を使用することはできません。 AKAほぼ無駄な情報。 –

+0

ここで私はそれを編集して、リファレンスが何かを持っていると指定するようにしました。私は、XElement.Add()メソッドのようなもので参照が必要であることを人々が知ることができると仮定していました。なぜなら、残りの質問全体は、XElement.Add()メソッドを作成するために行うことができることを示す例を使用していたからです。他の同様の方法が機能し、なぜ私が現在行っていることが、よりダイナミックな機能に必要なものを満たしていないのかということです。 –

答えて

2

Descendants()メソッドを呼び出すことができます。これは正確に返します。

あなたが特定のパスで特定の要素を取得したい場合は、単にループを書く:*尋ねとしてSLaks( `Descendants`)によって

var el = root; 
foreach (var name in path) 
    el = el.Element(name); 
+0

これについて詳しく説明できますか?要素に要素を追加するにはどうすればよいでしょうか? –

+0

@Sharp_:これは、どの要素を追加するかによって決まります。あなたが実際に望むものに応じて、これまたはループのいずれかが必要です。 – SLaks

+0

XElement.Addを使用して、希望の要素に追加する場合は、Doc.Descendants( "Example")のようなことをすることができますか?(新しいXElement( "newExample"))を追加しますか? –

関連する問題