10

Xml ファイルをループして、アカウントの値をメッセージに表示しようとしています。

XmlNodeList nodeList = testDoc.SelectNodes("/details/row/var");
foreach (XmlNode no in nodeList)
{
   XmlNode node = testDoc.SelectSingleNode("/details/row/var[@name='account']");
   test.actual = node.Attributes["value"].Value;

   MessageBox.Show(test.account);
 }

メッセージ ボックスには現在、最初のレコードが繰り返し表示されています。次のレコードに移動するにはどうすればよいですか?

事前にご入力いただきありがとうございます。

4

7 に答える 7

15

nodeから同じ要素を繰り返し割り当てていtestDocます。test.account(おそらく のタイプミス)が何であるか明確ではありませんtest.actualか?

noの内容を反復する変数ですnodeList-それを使用するつもりだったと思います。

OPの編集に続くEDIT nodeListが何であるかを示したので、代わりに次のようなことをしたいと思います:

XmlNodeList nodeList = testDoc.SelectNodes("/details/row/var[@name='account']"); 
foreach (XmlNode no in nodeList) 
{    
   test.actual = no.Attributes["value"].Value;
   ...
于 2011-01-10T18:56:30.777 に答える
5
        XmlDocument doc = new XmlDocument();
        doc.Load("d:\\test.xml");
        XmlNodeList node = doc.GetElementsByTagName("w:r");
        foreach (XmlNode xn in node)
        {
            try
            {
                if (xn["w:t"].InnerText != null)
                {
                    if (xn["w:t"].InnerText == "#")
                    {
                        string placeHolder = xn["w:t"].InnerText;
                        foreach (XmlNode a in node)
                        { 
                            if (a["w:t"].InnerText != "#")
                            {
                                string placeHolder1 = a["w:t"].InnerText;
                            }
                        } 
                    }
                }
            }

            catch (Exception e)
            {
                Console.Write(e);
            }
        } 
于 2012-11-08T05:50:18.737 に答える
3

これは、子ノードの情報を取得するための親ノード値のサンプルです。ここでは、ReportItems ParentNode と Print only image 子ノードを使用しています。

        xmldoc.Load(rdlFile);
        StringBuilder sb=new StringBuilder();
        XmlNode node = xmldoc.GetElementsByTagName("ReportItems")[0];
        XmlNodeList list = node.ChildNodes;
        atributes=new string[node.ChildNodes.Count];
        int  l = 0;
        for (int j = 0; j < node.ChildNodes.Count; j++)
        {


            if (list[j].Name == "Image")
            {
                XmlAttributeCollection att = list[j].Attributes;
                atributes[l] = att[0].Value.ToUpper();

            }
            l++;
        }
        for (int i = 0; i < node.ChildNodes.Count; i++)
        {
            if (searchText.Text.ToUpper() == atributes[i])
            {
                XmlNodeList lastlist = node.ChildNodes;
                XmlNodeList endlist = lastlist[i].ChildNodes;
                for (int k = 0; k < endlist.Count; k++)
                {
                    sb.Append(endlist[k].Name+" - "+ endlist[k].InnerText);
                    sb.Append("\n"+"\n");
                }

            }

        }

疑問がある場合はお知らせください..

于 2011-12-31T05:35:06.847 に答える
3

これを試して、

XmlDocument xdoc = new XDocument();

xdoc.Load("*/File/*"); 
string xmlcontents = xdoc.InnerXml;

var xpath = "(/details/row/var[@name='account'])";

XmlNodeList lists = xdoc.DocumentElement.SelectNodes(xpath);

foreach (XmlNode _node in lists)
{
    string _nodeValue = _node.InnerText;
    MessageBox.Show(_nodeValue);
}
于 2014-01-21T10:10:17.867 に答える
1

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

        //Create an xml reader;
        XmlDocument _xmlDocument = new XmlDocument();
        _xmlDocument.Load(/*File Name here*/);

        //Select the element with in the xml you wish to extract;
        XmlNodeList _nodeList = _xmlDocument.SelectNodes("/details/row/var[@name='account']");

        //Display the values in the node list to the screen;
        foreach (XmlNode _node in _nodeList)
        {
            String _nodeValue = _node.InnerText.ToString();
            MessageBox.Show(_nodeValue.ToString());
        }
于 2011-01-10T20:04:23.060 に答える
0

100% 確実ではありませんが、再帰を使用する必要があるかもしれません。そうでない場合は、次のようになります。

XmlDocument doc = //etc..
foreach(XmlNode node in doc.ChildNodes)
{
    if(node.Name == "account")
    {
        MessageBox.Show(node.Value);
    }
}
于 2011-01-10T18:56:55.160 に答える
0

xml ノードをノードごとに読み取ることに時間を費やすべきではありません。逆シリアル化を試してください:

于 2011-01-10T18:59:15.130 に答える