0

<name></name>少なくとも最初の要素のタグの間に値を格納して出力しようとしていますが、の値を<item></item>「検索」または「取得」できません<name></name>

シナリオをより明確に説明してください...

抽出したname値を取得して変換し(すべて小文字で、単語間のスペースにアンダースコアを追加)、「images」フォルダー内の画像ファイル名を検索できるようにする予定です。

一致するものが見つかった場合-画像ファイルへのファイルパスを取得し、それを変数内に保存して<image></image>から、現在の<item></item>要素内に作成し、タグ間にファイルパスを貼り付けます。別の999アイテムについても同じことを繰り返します。一部のアイテムnameがどの画像ファイル名とも一致しない場合は、ログテキストファイルを作成し、一致しなかったアイテムの名前を保存します。

XML構造

<items>
 <item>
  <name>Name1</name>
  <price>Price1</price>
  <description>Description1</description>
 </item>
 <item>
  <name>Name2</name>
  <price>Price2</price>
  <description>Description2</description>
 </item>
</items>

コード

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


    namespace myXmlParser
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlTextReader reader = new XmlTextReader("C:\\items_data.xml");
                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                        case XmlNodeType.Element: // The node is an element.
                            reader.MoveToElement();
                            Console.WriteLine(reader.Name);
                            break;
                        //case XmlNodeType.Text: //Display the text in each element.
                        //    Console.WriteLine(reader.Value);
                        //    break;
                        //case XmlNodeType.EndElement: //Display the end of the element.
                        //    Console.Write("</" + reader.Name);
                        //    Console.WriteLine(">");
                        //    break;
                    }

                }
                Console.ReadKey();

            }// main
        }// class
    }// namespace
4

2 に答える 2

2

Linq2Xmlの方が使いやすい

XDocument xDoc = XDocument.Load("C:\\items_data.xml");
var names = xDoc.Descendants("name")
    .Select(x => x.Value)
    .ToArray();

-

 xDoc.Descendants("name")
    .Where(x => x.Value == "Name1")
    .First()
    .Parent.Add(new XElement("image", "path of the image"));
于 2012-08-07T19:18:31.450 に答える
1

reader.ReadContentAsStringいつ試してみてください reader.Name == "name"
後でXMLを編集する予定なので、XmlDocumentを使用して、前に提案したXPathを適用することもできます。

于 2012-08-07T19:18:24.103 に答える