0

XMLファイルがあります:

<Root>
     <Lv1>
          <1_Data_Lv2_1>A1</1_Data_Lv2_1>
          <2_Data_Lv2_1>A2</2_Data_Lv2_1>
     </Lv1>
     <Lv1>
          <1_Data_Lv2_1>B1</1_Data_Lv2_1>
          <2_Data_Lv2_1>B2</2_Data_Lv2_1>
     </Lv1>
</Root>

C#

using (var myStream = new IsolatedStorageFileStream("Settings.xml", FileMode.Open, myIsolatedStorage))
{
    xdoc = XDocument.Load(myStream);
} 

var lv1s = from lv1 in xdoc.Elements("Root")
           select new
           {
               Children = lv1.Descendants("Lv1")
           };

foreach (var lv1 in lv1s)
{
    foreach (var lv2 in lv1.Children)
    {
        MessageBox.Show(Convert.ToString(lv2.Value));
    }
}

<1_Data_Lv2_1> == "A1"のすべてのノードlv1を取得して、別のxmlに書き込むにはどうすればよいですか?

4

1 に答える 1

1

ノードは数字で始めることができないため、投稿されたXMLは無効1_Data_Lv2_1です。One_Data_Lv2_12_Data_Lv2_1Two_Data_Lv2_1

One_Data_Lv2_1その変更を行うと、A1の値を持つすべてのノードを見つけることができます。

var doc = XDocument.Load( myStream );
// find all descendant nodes with a value of A1
var a1s = doc.Root.Descendants( "One_Data_Lv2_1" )
                 .Where( x => x.Value == "A1" )

foreach( XElement e in a1s )
{
    Debug.WriteLine( e.Value );
}

クエリの結果を新しいXMLドキュメントに追加するには:

var doc2 = new XDocument();
var root = new XElement("Root");
var lvl = new XElement( "LvlNew" );
// adding the a1s collection to the lvl node
lvl.Add( a1s );
root.Add( lvl );
doc2.Add( root );

これは次のようになります:

<Root>
  <LvlNew>
    <One_Data_Lv2_1>A1</One_Data_Lv2_1>
  </LvlNew>
</Root>
于 2012-05-08T23:42:39.667 に答える