1

たとえば、ニュース名とニュース日付を取得する必要があります。

<info>
<news>
<news name="Test 1" date="08.13.2013"/>
<news name="Test 2" date="08.09.2013"/>
</news>
</info>

C# を使用して、これをコンソールに表示します。

インターネットで見つけたいくつかのコードを試しました。しかし、誰も私に仕えませんでした!

編集¹:次のコードを試しました:

XmlDocument Doc = new XmlDocument();
Doc.Load(Server.MapPath("Content/Doc.xml"));
XmlNodeList itemList = Doc.DocumentElement.SelectNodes("news");
foreach (XmlNode currNode in itemList)
{
  string name = string.Empty;  <!-- here I make a new string and call it "date"-->
  XmlNode item = currNode.SelectSingleNode("news");
  name = item.Attributes["name"].Value.ToString();
  Console.WriteLine("Test Name: "+name+"");
}

と:

XmlDocument xml = new XmlDocument();
xml.LoadXml(myXmlString);

XmlNodeList xnList = xml.SelectNodes("/news/news");
foreach (XmlNode xn in xnList)
{
  string name = xn["name"].InnerText;
  string date = xn["date"].InnerText;
  Console.WriteLine("Test: {0} {1}", name, date);
}

しかし、それは機能せず、何も表示されません。またはプログラムが自動的に終了します。

解決しました!全てに感謝!

私はこのコードを使用します:

static void Main(string[] args)
        {
            XElement rootElement = XElement.Load(@"http://mywebsite.com/test.xml");

            Program test = new Program();
            Console.WriteLine(test.GetOutline(0, rootElement));  
        }

        private string GetOutline(int indentLevel, XElement element)
        {
            StringBuilder result = new StringBuilder();

            if (element.Attribute("name") != null)
            {
                result = result.AppendLine(new string(' ', indentLevel * 2) + element.Attribute("name").Value);
            }

            foreach (XElement childElement in element.Elements())
            {
                result.Append(GetOutline(indentLevel + 1, childElement));
            }

            return result.ToString();
        }

結果: テスト 1 テスト 2

4

3 に答える 3

1

私は、この種の目的で Linq to XML を使用するのが好きです。

このスニペットをLinqPadでテストしました...これを行う方法のアイデアを提供する必要があります。

var xml = @"<info>
                <news>
                    <news name='Test 1' date='08.13.2013'/>
                    <news name='Test 2' date='08.09.2013'/>
                </news>
            </info>";

var doc = XElement.Parse(xml);

var list = from x in doc.DescendantsAndSelf("news")
            where !string.IsNullOrEmpty((string)x.Attribute("name"))
            select new {name = (string)x.Attribute("name"), date = (DateTime)x.Attribute("date")};
list.Dump();
于 2013-08-13T22:47:48.047 に答える
0

ニュース コンテナにニュース要素を保持させることで、少し複雑になります。しかし、基本的なxml操作は次のようになります...

XDocument xdoc = XDocument.Load(Server.MapPath("Content/Doc.xml"));

var newsParent = xdoc.Descendants("news").First();  // gets the parent news item
var news = newsParent.Descendants("news")
    .Select(x => new {Name = x.Attribute("name"), Date = x.Attribute("date")});
foreach (var element in news)
{
    Console.WriteLine(element.Name +" "+ element.Date);
}
于 2013-08-13T22:48:03.760 に答える
0

Linq to Xml は、データのフェッチがはるかに簡単で直接的なため、より良いオプションになる可能性があります。

たとえば、提供した xml サンプルに基づいてデータを取得する方法の 1 つは、次のようなものです。

XElement data = XElement.Load(@"C:\Test.xml");

var newsResults = data.Element("news")
               .Descendants("news")
               .Select(x => new
               {
                   Name = (string)x.Attribute("name"),
                   Date = (DateTime)x.Attribute("date")
               });

foreach (var news in newsResults)
{
    Console.WriteLine("News: {0}, Date: {1}", news.Name, news.Date);
}
于 2013-08-13T22:58:59.223 に答える