2011-07-15 13 views
1

私は以下のコードを使ってxmlファイルの各ノードをドロップダウンリストに追加していますが、これまでのところ間違った結果が残っています。ここでドロップダウンリストにXML値を追加するC#

XmlDocument XmlDoc = new XmlDocument(); 
XmlDoc.Load(Server.MapPath("~/Upload/" + FileUpload1.FileName)); 

XmlNodeList question = XmlDoc.GetElementsByTagName("row"); 

foreach(XmlNode Node in question) 
{ 
     string answer = Node["var"].Attributes["name"].InnerText; 
     string ques = Node["var"].InnerText; 

     DropDownList1.Items.Add(new ListItem(answer, ques)); 
} 

私のxmlファイルには、私がする必要がどのような

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<root> 
    <row> 
    <var name="Name" value="Garcia" /> 
    <var name=" Surname" value=" Jose" /> 
    <var name=" Country" value=" Cuba" /> 
    <var name=" Job" value="Software Developer" /> 
    <var name=" Cabin" value="345A" /> 
    </row> 
    <row> 
    <var name="Name" value="Lenon" /> 
    <var name=" Surname" value="Tim" /> 
    <var name=" Country" value="USA" /> 
    <var name=" Job" value="SoftwareDeveloper" /> 
    <var name=" Cabin" value="444" /> 
    </row> 
    <row> 
    <var name="Name" value="Rusell" /> 
    <var name=" Surname" value=" Anthony" /> 
    <var name=" Country" value=" UK" /> 
    <var name=" Job" value="Web Designer" /> 
    <var name=" Cabin" value="345" /> 
    </row> 
    <row> 
    <var name="Name" value="Wolf" /> 
    <var name=" Surname" value=" Werner" /> 
    <var name=" Country" value=" Germany" /> 
    <var name=" Job" value="Linux IT" /> 
    <var name=" Cabin" value="234 " /> 
    </row> 
</root> 

あるだけで値名、姓、国、仕事やキャビンを持つドロップダウンリストに移入され、ユーザはこれらを選択することができますデータを操作するための値。私は答えタグで私がコードiveが見たものとは違うことを試みていた値にアクセスしていることに気づきました。

このコードから、私のドロップダウンリストになった結果イムは 名 名 名、各ノードの最初の属性を追加すること 名前 イムですが、私は何をする必要があることはただ一つのノードからすべての値を追加することです。注:xmlファイルの作業には異なる値と名前などがあるので、ハードコーディングはオプションではありません。

誰でもIDをお寄せいただければ幸いです。ありがとうございます。

+0

なぜファイルソースを定義するために 'FileUpload1.FileName'を使用しますか? – VMAtm

+0

そして、ファイル内の 'Node [" var "]。InnerText'はどこにありますか? – VMAtm

+0

'value'属性の値はどうしていますか?例: "Wolf"、 "Werner"、 "Germany" ... – Tocco

答えて

0
XDocument xml = XDocument.Load(Server.MapPath("~/Upload/" + FileUpload1.FileName)); 

foreach (var el in xml.Document.Descendants().First().Descendants().First().Descendants()) 
{ 
    DropDownList1.Items.Add(new ListItem(el.Attribute(XName.Get("name")).Value, Value = el.Value)); 
} 
+0

ちょうどこれが完璧なおかげで働いてみました – user123

0

これは達成するためにDataBindingを使用する必要があります。 This blog postには、ASP.NETでこれを行う方法の良い例があります。これはWinFormsにも当てはまります。キーの機能は次のとおりです。データバインディングに関するいくつかの詳細については

//populates the dropdownlist from xml file 
public void PopulateDDLsFromXMLFile() 
{ 
    DataSet ds = new DataSet(); 
    ds.ReadXml(MapPath("~/Resources/XMLFile.xml")); 

    //now define datatext field and datavalue field of dropdownlist 
    ddlName.DataTextField = "Name"; 
    ddlName.DataValueField = "Name"; 
    ... 

    //now bind the dropdownlist to the dataview 
    ddlName.DataSource = ds; 
    ddlName.DataBind(); 
} 

は、次のように読むことができる:ASP.NETWinFormsWPF

+0

私はそれを行うためにデータセットを使用しませんでした。 – Tocco

+0

@Tocco - そうした場合は、別の解決策を提示する必要があります。 –

+0

OKイルは、データバインディングとポストバックを見て、 – user123

0

GarciaLenonRusellWolfをddlに表示しますか?私はあなたがドロップダウンリストで何をしているのか正確にはわからない

Node["var"].Attributes["name"].InnerText; 

Node["var"].Attributes["value"].Value; 
+0

いいえ名前、姓などを追加します。atmは各ノードから名前を4回だけ取り出します。 – user123

+0

string answer = Node ["var"]属性["value"]。 文字列ques =ノード["var"]。InnerText; DropDownList1.Items.Add(新しいListItem(answer、ques)); XmlNode CurNode =ノード["var"]; while(CurNode.NextSibling!= null) { DropDownList1.Items.Add(新しいListItem(CurNode.NextSibling.Attributes ["value"]。Value、(CurNode.NextSibling.InnerText))); CurNode = CurNode。NextSibling; } –

+0

よく見えるようにする方法がわかりません。基本的なアイデアは、ノードをnextsiblingに移動して値を取得する必要があるということです。しかし、私はXML形式が良くないと思う。あなたがそれを変更することができれば。コードはより良くなります。 –

0

ていますが、次のコードを使用することができます。そうすれば、自分の変更

XmlDocument XmlDoc = new XmlDocument(); 
    XmlDoc.Load(Server.MapPath("~/Upload/" + FileUpload1.FileName)); 

    string searchpath = "//root//row"; 
    XmlNodeList xmlnodes = XmlDoc.SelectNodes(searchpath); 

    foreach (XmlNode node in xmlnodes) 
    { 
     string name = node.SelectSingleNode("//var[@name='Name']").Attributes["value"].InnerXml; 
     string surname = node.SelectSingleNode("//var[@name=' Surname']").Attributes["value"].InnerXml; 
     string Country = node.SelectSingleNode("//var[@name=' Country']").Attributes["value"].InnerXml; 
     string Job = node.SelectSingleNode("//var[@name=' Job']").Attributes["value"].InnerXml; 
     string Cabin = node.SelectSingleNode("//var[@name=' Cabin']").Attributes["value"].InnerXml; 
    } 
関連する問題