例如,我需要: 新闻名称和新闻发布日期:
<info>
<news>
<news name="Test 1" date="08.13.2013"/>
<news name="Test 2" date="08.09.2013"/>
</news>
</info>
使用C#在控制台中显示..
我尝试了几个代码,我在网上找到了。 但没有人能为我服务!
EDIT¹: 我尝试过以下代码:
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
答案 0 :(得分:1)
我喜欢将Linq用于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();
答案 1 :(得分: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);
}
答案 2 :(得分:0)
Linq to Xml可能是一个更好的选择,因为提供数据更简单直接,
例如,根据您提供的xml示例获取数据的一种方法可能是这样的:
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);
}