2011-07-19 24 views
0

私はXMLデータを処理する過程で何をしようとしています。XMLからの配列の印刷 - C#

  • ユーザー上記名前を持つ各ノードのドロップダウンリスト

  • から名前値を選択し、値が

  • リストは、文字列配列に変換リストに追加され

  • **テストする配列を出力すると、出力は返されません。

  • int配列に変換された文字列配列Y( アレイ上の計算を可能にするために)

  • **印刷は、ここで私が作成したコードが再び

何も出力を提供しない場合、私は言うカントので、私は何も出力エラーを取得していません配列が作成されました。

if (DropDownList1.SelectedItem.Text=="Cabin") 
{ 
    //Load XML document 
    XmlDocument xml = new XmlDocument(); 
    xml.LoadXml(Server.MapPath("~/Upload/" + FileUpload1.FileName)); 
    // xnList = nodes -> rows with Cabin 
    XmlNodeList xnList = xml.SelectNodes("/root/row[@name='Cabin']"); 

    //create a string list 
    List<string> strvalues = new List<string>(); 
    //populate list with values @ node Cabin 
    foreach (XmlNode xn in xnList) 
    { 
     strvalues.Add(xn["value"].InnerText); 
    } 

    //convert list to array 
    strvalues.ToArray(); 
    for (int i = 0; i < 2; i++) 
    { 
     //print array 
     Console.WriteLine(strvalues[i]); 
    } 
    //convert string array to int array for data manipulation 
    int[] values = strvalues.Select(x => int.Parse(x)).ToArray(); 
    for (int i = 0; i < values.Length; i++) 
    { 
     //print array 
     Console.WriteLine(values[i]); 
    } 
} 

ここにXMLファイルのセクションもあります。

<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="345" /> 
    </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> 
</root> 

答えて

0

解決策に関連するコンソールウィンドウはありますか?私はあなたがUIを使用していると思うので、コンソールウィンドウはありません(Console.WriteLineは何も出力しません)。あなたは1を添付することができますが、デバッグのために、私はDebug.WriteLineを提案することができます:

http://www.dotnetperls.com/debug-write

また、あなたの配列はデバッグモードに移入されているかどうかをチェックする必要があります。

1

サンプルXMLのnameの属性値は "Cabin"です。先頭のスペースに注意してください。

XPathクエリで名前に対してテストされた属性値は、 "Cabin"です。先頭のスペースはありません。

ノードが見つかりません。

これを調べる一般的な答えは、ノードリストを作成してその時点で内容を確認した直後にブレークポイントを設定することです。

さらに、Linq to XMLは、それが利用可能であれば、より快適に作業することができます。

2

<row>要素にはnameという名前の属性がなく(実際の名前属性値のスペースもありません)、XPath式が間違っています。

/root/row/var[@name=' Cabin']または/root/row[var/@name=' Cabin']<row>要素が必要な場合は、そうでない場合はコードを見ていますが)を意味しましたか?あなたは何に結果を割り当てないので


また、ラインstrvalues.ToArray()は、何もしません。 ToArrayはリストを変更しないので、リストと同じ内容の新しい配列を返します。このコードでもリストを配列に変換する本当の理由はありません。

+0

スペースの問題を指摘していただきありがとうございます。この理由は、.csvファイルをXMLに変換しているため、見落としたスペースの問題が明らかです。配列に変換する限り、配列のデータを渡すことができる必要があるので、リストをint配列に変換することを最善に考えました – user123

+0

'int'配列に変換するコードは問題ありませんが、 'strvalues.ToArray()'の以前の呼び出しは不要です(戻り値を無視しているので、何の効果もありません)。 – Sven