【问题标题】:How can I get node I want from XML如何从 XML 获取我想要的节点
【发布时间】:2013-04-02 08:45:10
【问题描述】:
<?xml version="1.0" encoding="utf-8" ?> 
  <Root>
       <Fruits>
            <Fruit>hahahaha</Fruit>
       </Fruits>
  </Root>

如果我试试这段代码,

  string[] cFruitName; int i=0;
  XmlDocument a= new XmlDocument();
  a.LoadXml(getXML());

  foreach (XmlNode xn in a)
  {
     cFruitName[i] = xn.Text;
     i++;
  }

但我得到nullxn.Text

我想要的只是获取水果的值,例如本例中的“hahahah”。

编辑

我现在更改了我的 XML。

【问题讨论】:

  • Fruit里面为什么会有水果
  • 有没有更好的方法,请告诉我

标签: c# xml xpath .net-2.0


【解决方案1】:
var xml = XDocument.Parse(getXML());

var fruits = xml.Descendants("fruit").Select(n => n.Value);

Console.WriteLine(string.Join(Environment.NewLine, fruits));

打印

hahahaha

.net 2.0 版本使用 XPath

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

XmlNodeList fruits = xml.SelectNodes("//fruit");

foreach (XmlNode fruit in fruits)
{
    Console.WriteLine (fruit.InnerText);
}

打印相同

【讨论】:

  • 对不起,我不能使用 LINQ,我使用的是 .net2.0
  • 专业提示:本质上,每个 LINQ 查询只是 foreach(thing in collectionOfThings){if(thing.Property == sometest){//do something}} 的简写方式跨度>
  • 当然你可以使用 Linq 。在这里查看它的 Linq for .net 2.0 albahari.com/nutshell/linqbridge.aspx
【解决方案2】:

试试这个:

string[] cFruitName; int i=0;
XmlDocument a= new XmlDocument();
a.LoadXml(getXML());

foreach (XmlNode xn in a.Where(x=>x.Text != null))
{
   cFruitName[i] = xn.Text;
   i++;
}

string[] cFruitName; int i=0;
XmlDocument a= new XmlDocument();
a.LoadXml(getXML());

foreach (XmlNode xn in a.Where(x=>x.Name == "fruit"))
{
   cFruitName[i] = xn.Text;
   i++;
}

【讨论】:

  • 检查你的变量名。
  • 啊,我是从作者的帖子里抄过来的,以前的版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
相关资源
最近更新 更多