[英]get the value of a xml tag
在下面的 xml 中,我想獲取標簽 ID 的值,其中名稱標簽的值為“HighLevelReport%”。
<RunResults xmlns="http://www.hp.com/PC/REST/API">
<RunResult>
<ID>17245</ID>
<Name>output.mdb.zip</Name>
<Type>Output Log</Type>
<RunID>4196</RunID>
</RunResult>
<RunResult>
<ID>17246</ID>
<Name>VuserLog.zip</Name>
<Type>Output Log</Type>
<RunID>4196</RunID>
</RunResult>
<RunResult>
<ID>17248</ID>
<Name>Reports.zip</Name>
<Type>HTML Report</Type>
<RunID>4196</RunID>
</RunResult>
<RunResult>
<ID>17249</ID>
<Name>HighLevelReport_4196.xls</Name>
<Type>Rich Report</Type>
<RunID>4196</RunID>
</RunResult>
</RunResults>
目前我正在使用數據集來獲取值
using (DataSet reader = ds.ReadXml(xml))
{
DataRow[] DR = reader.Tables[0].Select("Name like '%HighLevelReport%'");
int testID = Convert.ToInt32(DR[0].ItemArray[0].ToString());
}
請幫我做一些其他的選擇。
我會避免使用DataSet
除非您真的非常需要。 如果您只是處理 XML,請使用 XML API。 我發現 LINQ to XML 最適合這個。 例如:
XNamespace ns = "http://www.hp.com/PC/REST/API";
var doc = XDocument.Parse(xml);
var ids = doc.Root
.Elements(ns + "RunResult")
.Where(rr => ((string) rr.Element(ns + "Name"))?.StartsWith("HighLevelReport") ?? false)
.Select(rr => (string) rr.Element(ns + "RunID"));
這是一個完整的例子:
using System;
using System.IO;
using System.Linq;
using System.Xml.Linq;
public class Program
{
public static void Main()
{
// Alternatively, use XDocument.Load to load from a file
string xml = File.ReadAllText("test.xml");
var doc = XDocument.Parse(xml);
XNamespace ns = "http://www.hp.com/PC/REST/API";
var ids = doc.Root
.Elements(ns + "RunResult")
.Where(rr => ((string) rr.Element(ns + "Name"))?.StartsWith("HighLevelReport") ?? false)
.Select(rr => (string) rr.Element(ns + "RunID"));
foreach (var id in ids)
{
Console.WriteLine(id);
}
}
}
此處的Where
子句處理缺少的Name
元素 - 轉換為string
將返回 null,因此不會調用StartsWith
。 如果缺少RunID
元素,您的輸出中最終會出現一個空元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.