[英]Linq to xml foreach not working
嗨,我在讓我的foreach工作時遇到問題。 在我的simpel linq查詢中,它僅選擇一個節點。 我實際上沒有什么問題,因為我曾經使用過Xmldocument和xmlnodelist。 但是我真的很想學習使用Linq做到這一點,我在Google上找不到為什么它不起作用的任何東西,因此我嘗試了這些鏈接上的expmale。
http://www.dotnetcurry.com/linq/564/linq-to-xml-tutorials-examples
https://forums.asp.net/t/1378244.aspx?Linq+to+XML+query+how+to+get+all+elements+but+except+some+
http://www.c-sharpcorner.com/UploadFile/de41d6/learning-linq-made-easy-linq-to-xml-tutorial-3/
這兩個示例僅返回一個xml節點。
XElement ele = XElement.Load(filePath);
String aXmlString = ele.ToString(SaveOptions.DisableFormatting) + ele.Value;
foreach (XElement xNode in ele.Descendants("lakeringsdel"))
{
//litTest.Text = xNode.Element("lakeringsMetode").Value;
strData = "<table style='width:100%;' >"
+ "<tr>"
+ "<th>Nr.</th>"
+ "<th>Arbejdsbeskrivelse/Omfang</th>"
+ "<th>Metode</th>"
+ "<th>Ae</th>"
+ "</tr>"
+ "<tr>"
+ "<td>" + xNode.Element("ledenr").Value + "</td>"
+ "<td>" + xNode.Element("lakeringsDel").Value + "</td> "
+ "<td>" + xNode.Element("lakeringsMetode").Value + "</td> "
+ "<td>" + xNode.Element("arbejdsEnheder").Value + "</td> "
+ "</tr>"
+
"</table>";
}
下一個例子
var test = "";
var q = from c in ele.Descendants("lakeringsdel")
select c.Element("lakeringsDel").Value;
foreach (string item in q)
{
test = item;
}
我的xml文件
<lakRapportDetaljer>
<aePrTime>10</aePrTime>
<fabrikatModelTekst>FORD FOCUS (CEW)</fabrikatModelTekst>
<kilometerStand>28205</kilometerStand>
<lakArbejde>2745.0</lakArbejde>
<lakIaltTotal>3610.05</lakIaltTotal>
<lakIndex>134</lakIndex>
<lakMaterialer>865.05</lakMaterialer>
<lakTimepris>450.0</lakTimepris>
<lakeringsMetode>2-LAGS METALLIC</lakeringsMetode>
<lakeringsMetode>DØRGREB LEVERES LAKE</lakeringsMetode>
<lakeringsdel>
<arbejdsEnheder>10.0</arbejdsEnheder>
<lakeringsDel>KOFANGER H B</lakeringsDel>
<lakeringsMetode>REPARATION LAK.PLAST</lakeringsMetode>
<ledenr>2584</ledenr>
</lakeringsdel>
<lakeringsdel>
<arbejdsEnheder>15.0</arbejdsEnheder>
<lakeringsDel>BAGSKÆRM HØJRE</lakeringsDel>
<lakeringsMetode>REP.LAK. &lt;50%, METAL</lakeringsMetode>
<ledenr>3482</ledenr>
</lakeringsdel>
<lakeringsdel>
<arbejdsEnheder>5.0</arbejdsEnheder>
<lakeringsDel>SPECIALAFDÆKNING</lakeringsDel>
<lakeringsMetode>OVERFLADE LAKERING</lakeringsMetode>
<ledenr>1000</ledenr>
</lakeringsdel>
<miljoeLakMaterialerProcent>6</miljoeLakMaterialerProcent>
</lakRapportDetaljer>
在這兩個例子中,你設置輸出strData
和test
,通過您的項目你每次循環。 這樣就只能處理列表中的最后一項。
假設您要在首頁上顯示一個包含結果的表格,則應將第一個示例更改為此
XElement ele = XElement.Load(filePath);
String aXmlString = ele.ToString(SaveOptions.DisableFormatting) + ele.Value;
strData = "<table style='width:100%;' >"
+ "<tr>"
+ "<th>Nr.</th>"
+ "<th>Arbejdsbeskrivelse/Omfang</th>"
+ "<th>Metode</th>"
+ "<th>Ae</th>"
+ "</tr>"
foreach (XElement xNode in ele.Descendants("lakeringsdel"))
{
//litTest.Text = xNode.Element("lakeringsMetode").Value;
strData += "<tr>"
+ "<td>" + xNode.Element("ledenr").Value + "</td>"
+ "<td>" + xNode.Element("lakeringsDel").Value + "</td> "
+ "<td>" + xNode.Element("lakeringsMetode").Value + "</td> "
+ "<td>" + xNode.Element("arbejdsEnheder").Value + "</td> "
+ "</tr>";
}
strData += "</table>";
我建議使用StringBuilder
而不是+
來構建字符串。 看起來像這個例子。
StringBuilder strData = new StringBuilder("<table style='width:100%;'>");
strData.AppendLine("<tr>");
strData.AppendLine("<th>Nr.</th>");
如果要選擇3個Xelement節點“ lakeringsdel”內的所有元素,則可以執行以下操作:
var q = from c in ele.Descendants("lakeringsdel")
select c;
foreach (XElement item in q)
{
test = item.Value;
}
或直接:
var q = ele.Descendants("lakeringsdel");
foreach (XElement item in q)
{
test = item.Value;
}
得到相同的結果
或1行:
ele.Descendants("lakeringsdel").ToList().ForEach(elem=>test =elem.Value);
但是正如Reniuz在評論中所說:您只將最后一個結果存儲在“ test”變量中
如果要存儲所有結果,可以執行以下操作:
List<string> test = new List<string>();
var q = from c in ele.Descendants("lakeringsdel")
select c.Element("lakeringsDel").Value;
foreach (string item in q)
{
test.Add(item);
}
或1行:
test.AddRange(q);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.