1

プログラムでXMLを解析しようとしていますが、これを行うための最良の方法がわからないようです。

XMLには、「コンテナ」と呼ばれる要素があります。この要素には、「テキスト」と呼ばれる複数の子孫があります。私がやりたいのは、「text」要素内の値を順番に引き出して、文字列に保存することです。

したがって、XMLは次のようになります。

<containers>
   <container>
      <elt3243> </elt3243>
      <elt1122></elt1122>
      <elt><text> Put me in a string please </text> </elt>
      <elt2211></elt2211>
   </container>
   <container>
      <elt3243><text>I would also like to be in the string</text></elt3243>
      <elt1122></elt1122>
      <elt> </elt>
      <elt2211></elt2211>
   </container>
</containers>

そして私が望む結果:

String result = "Put me in a string please \n I would also like to be in the string";

これを行うための最良の方法は何ですか?

4

5 に答える 5

2
XDocument doc = XDocument.Load(file.FullName);
var strings = doc.Descendants("container").SelectMany(x => x.Descendants("text")).ToList();
return strings.Join(" \n ");
于 2012-10-11T15:01:55.997 に答える
1

これを試して

XDocument xDocument = new XDocument();
//load xml
StringBuilder sb = new StringBuilder();

foreach(var text in xDocument.Descendants("text") )
{
sb.append(text.value)
}
于 2012-10-11T15:00:12.880 に答える
1

これがあなたが何ができるかを示すべきWin32コンソールの例です:

var doc = XDocument.Parse(
    "<containers>" + 
        "<container>"+
          "<elt3243> </elt3243>"+
          "<elt1122></elt1122>"+
          "<elt><text> Put me in a string please </text> </elt>"+
          "<elt2211></elt2211>"+
       "</container>"+
       "<container>"+
          "<elt3243><text>I would also like to be in the string</text></elt3243>"+
          "<elt1122></elt1122>"+
          "<elt> </elt>"+
          "<elt2211></elt2211>"+
       "</container>"+
    "</containers>", LoadOptions.None);

var text = doc.Descendants("text").Select(x => x.Value);
Console.WriteLine(string.Join(" \n ", text));
Console.ReadKey(false);

以前の回答が示すように、これを配列またはリストに投影する必要はないことに注意してください。string.Joinセパレータとオブジェクトの配列が必要なだけです。IEnumerable<string>配列への変換は、ランタイムによって暗黙的に処理されます。テストするには、新しいC#コンソールアプリを作成し、これをMain()にドロップします。そのまま動作するはずです...

于 2012-10-11T15:06:14.220 に答える
0

XDocumentはあなたの友達です...

var doc = XDocument.Load(...filename...);
var strings = doc.Descendants("text").Select(x => x.Value).ToArray();
var result = string.Join("\r\n", strings);

ForEach拡張メソッドを使用するもっと簡単な方法があるかもしれません...

于 2012-10-11T15:00:32.357 に答える
0

XPathを使用できます。MSDNの詳細については、こちらを参照してください。

だから、このようなもの:

XPathDocument document = new XPathDocument(<Source of your XML >);
XPathNavigator navigator = document.CreateNavigator();

XPathNodeIterator nodes = navigator.Select("//text");

string result = "";
while (nodes.MoveNext())
{
    result += nodes.Current.Value + "\n";
}
于 2012-10-11T14:52:51.913 に答える