2011-09-04 169 views
0

我尝试使用LINQ来读取XML文件。但是,存储所选属性值的字符串始终为空。为什么字符串总是空的?

下面是代码:

 string output = ""; 
     XDocument loaded = XDocument.Load(@"d:\input.xml"); 

     var ta = from tmp in loaded.Descendants("NewDataSet.Table") 
       select tmp.Element("E1"); 

     foreach (string ss in ta) 
     { 
      ouput += ss; 

     } 

output字符串总是空的。但ss字符串具有正确的值。

什么问题?

我不知道如何添加样式的XML文件。所以我必须将xml文件更新为图像。 :( enter image description here

+8

请发布一个(小)代表XML文档。 – Oded

+1

如果您逐步调试您的代码,当当前语句(调试器的黄色bg行)到达大括号'}'时,您在'output'中看到了什么? –

+0

对不起,但每个人都试图帮助这里今天是低调的 - 所有这些sherrifs在这里的良好行为 - 我想我会打电话给它的一天,现在不帮助任何人在这里 - 也许所有那些可爱的小downvoters终于离开 - 但老实说:这一面是为了不让你的自我充电...是的,这是一个完全的旧金山咆哮,但不得不说它 – Carsten

回答

4

现在你已经证明你的XML,这里是如何解决你的代码:

var ta = from tmp in loaded.Descendants("Table") 
     select tmp.Element("E1"); 

,你在C#中做导航XML树不要使用.在XML中,你可以还使用XPath导航XML树:

var ta = from tmp in loaded.XPathSelectElements("NewDataSet/Table/E1") 
     select tmp; 

此外,我会建议你使用StringBuilder而不是字符串连接的这个输出变量:

var ta = from tmp in loaded.Descendants("Table") 
     select tmp.Element("E1"); 

var builder = new StringBuilder(); 
foreach (string ss in ta) 
{ 
    builder.Append(ss); 
} 
string output = builder.ToString(); 
+0

现在工作正常。 :) – SUT

+1

在推荐优化之前的配置文件,并更喜欢StringWriter到StringBuilder。 –

+0

@Binary Worrier +1,对于给定的XML样本,更喜欢'string'。 –

0
var ta = from tmp in loaded.Descendants("Table") 
select tmp.Element("E1"); 
相关问题