2017-05-20 12 views
0

大文字で書かれたファイルは です。タイプ要素を取得し、各ソースのデータを取得してテキストフィールドに出力します。 Cantがうまくいくようです。「 これを解析するにはどうすればよいですか?複数のノードでXMLを解析する

<Config> 
    <Type>8_Port_Switch</Type>  ` 
     <Inputs> 
       <Source_1> 
       <Source_1_Name>BobsPC</Source_1_Name> 
       <Source_1_Input>7</Source_1_Input> 
       </Source_1> 
      <Source_2> 
       <Source_2_Name>Office</Source_2_Name> 
       <Source_2_Input>4</Source_2_Input> 
      </Source_2> 
      <Source_3> 
       <Source_3_Name>Printer</Source_3_Name> 
       <Source_3_Input>3</Source_3_Input> 
      </Source_3> 
    </Config> 

このファイルは最大32ポートです。私は型情報を使用して特定のフォームを開いてから、フォームに読み込み結果を入力させたいと思っています。

私は、たとえば

を移入することを名前や入力のための各ソースと2つのテキストボックスのラベルを持っています。私は、データを読み込み、データを取りたい: enter image description here

この情報を編集する。 新しいxmlドキュメントを作成し、サーバーにアップロードします。私は問題なしで作成することができます。それを読んでそれをフィールドに戻すだけです。

答えて

1

オプション1

私はクリーンなアプローチはDataSetにあなたのXMLの内容を投げた後、テーブルにフォームのコントロールをバインドすることになると思います。ここであなたを助けるための例です:

DataSet ds = new DataSet(); 
ds.readxml("XML File Path"); 

var bs = new BindingSource(); 
bs.DataSource = ds; 
bs.DataMember = ds.table[0].tablename; 

textBox1.DataBindings.Add("FirstName", bs, "Table Name"); 
textBox2.DataBindings.Add("FirstName", bs, "Table Name"); 

あなたは、XMLのためのC#クラスを作成するために、私の答えhereを使用することができます。オプション2

。次に、xmlの内容をC#クラスにデシリアライズします。これをC#クラスにデシリアライズしたら、クラスのインスタンスを操作して操作できます。インスタンスをフォームにバインドすることもできます。フォームコントロールは、C#クラスインスタンスのようにインスタンスの内容を変更できます。

完了したら、xmlにシリアル化することができます。ここにあなたのXML用に生成されたクラスは、次のとおりです。

/// <remarks/> 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] 
public partial class Config 
{ 

    private string typeField; 

    private ConfigInputs inputsField; 

    /// <remarks/> 
    public string Type 
    { 
     get 
     { 
      return this.typeField; 
     } 
     set 
     { 
      this.typeField = value; 
     } 
    } 

    /// <remarks/> 
    public ConfigInputs Inputs 
    { 
     get 
     { 
      return this.inputsField; 
     } 
     set 
     { 
      this.inputsField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public partial class ConfigInputs 
{ 

    private ConfigInputsSource_1 source_1Field; 

    private ConfigInputsSource_2 source_2Field; 

    private ConfigInputsSource_3 source_3Field; 

    /// <remarks/> 
    public ConfigInputsSource_1 Source_1 
    { 
     get 
     { 
      return this.source_1Field; 
     } 
     set 
     { 
      this.source_1Field = value; 
     } 
    } 

    /// <remarks/> 
    public ConfigInputsSource_2 Source_2 
    { 
     get 
     { 
      return this.source_2Field; 
     } 
     set 
     { 
      this.source_2Field = value; 
     } 
    } 

    /// <remarks/> 
    public ConfigInputsSource_3 Source_3 
    { 
     get 
     { 
      return this.source_3Field; 
     } 
     set 
     { 
      this.source_3Field = value; 
     } 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public partial class ConfigInputsSource_1 
{ 

    private string source_1_NameField; 

    private byte source_1_InputField; 

    /// <remarks/> 
    public string Source_1_Name 
    { 
     get 
     { 
      return this.source_1_NameField; 
     } 
     set 
     { 
      this.source_1_NameField = value; 
     } 
    } 

    /// <remarks/> 
    public byte Source_1_Input 
    { 
     get 
     { 
      return this.source_1_InputField; 
     } 
     set 
     { 
      this.source_1_InputField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public partial class ConfigInputsSource_2 
{ 

    private string source_2_NameField; 

    private byte source_2_InputField; 

    /// <remarks/> 
    public string Source_2_Name 
    { 
     get 
     { 
      return this.source_2_NameField; 
     } 
     set 
     { 
      this.source_2_NameField = value; 
     } 
    } 

    /// <remarks/> 
    public byte Source_2_Input 
    { 
     get 
     { 
      return this.source_2_InputField; 
     } 
     set 
     { 
      this.source_2_InputField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public partial class ConfigInputsSource_3 
{ 

    private string source_3_NameField; 

    private byte source_3_InputField; 

    /// <remarks/> 
    public string Source_3_Name 
    { 
     get 
     { 
      return this.source_3_NameField; 
     } 
     set 
     { 
      this.source_3_NameField = value; 
     } 
    } 

    /// <remarks/> 
    public byte Source_3_Input 
    { 
     get 
     { 
      return this.source_3_InputField; 
     } 
     set 
     { 
      this.source_3_InputField = value; 
     } 
    } 
} 

は、XMLは多少の誤差があったと私はそのようなタグが欠落していたクロージングとしてそれらを修正する必要がありました。次に、次のコードを使用して1つのものを変更してから再保存します。それは働いた:

var serializer = new XmlSerializer(typeof(Config)); 
var reader = new StreamReader("StackQuestion.xml"); 
var result = serializer.Deserialize(reader) as Config; 
reader.Close(); 
result.Inputs.Source_1.Source_1_Name = "CodingYoshi"; 

serializer.Serialize(new StreamWriter("StackQuestion.xml"), result); 
+0

ファイルを読み込んだ後にファイルを編集してサーバーに再送信するので、本当にxmlにしておく必要があります。すべてがXML形式でなければなりません。 –

+0

私はコードの別の部分からxmlを書いて送信しています。しかし、私は変更する必要があります私はインポートするには、入力し、編集し、再構築して –

+0

@ C.macを送信するイベントを変更する必要があります私の編集のオプション2を参照してください。 – CodingYoshi

1

次のことを試してみてください。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      var results = doc.Descendants("Config").Select(x => new { 
       name = (string)x.Element("Type"), 
       type = x.Element("Inputs").Elements().Select(y => new 
       { 
        id = y.Name.LocalName, 
        name = (string)y.Elements().First(), 
        input = (int)y.Elements().Last() 
       }).ToList() 
      }).ToList(); 

     } 
    } 
} 
+0

ありがとう。私はそれを試してみましょう。 –

関連する問題