[英]Reading data from XML with attributes
我有一個XML文件,如下所示:
<CPageDataXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<control id="busRowOAppr2EIDLookUpUserControl" controltype="business">
<field controlvaluetype="single" key="busRowOAppr2EIDLookUpUserControl_txtEID">
<valuefield value="709227">E8 - John Doe</valuefield>
</field>
<field controlvaluetype="hidden_single" key="busRowOAppr2EIDLookUpUserControl_txtEID_Email">
<valuefield value="_JohnDoe@Wonder.com">emailid</valuefield>
</field>
</control>
<control id="busDelegationFromDate123" controltype="business">
<field controlvaluetype="single" key="txtCalanderDateWithImage_UserControl">
<valuefield value="" />
</field>
</control>
</CPageDataXML>
我想讀取值字段的值,其中控件id =“ busRowOAppr2EIDLookUpUserControl”
C#代碼是:這是用於加載XML的代碼:
XmlDocument xPagedata=new XmlDocument();
XmlNode xnodePagedata = null;
xPagedata.LoadXml(strPageData);
這是SelectSingleNode的代碼:
string a = xnodePagedata.SelectSingleNode(//Control[@id='busRowOAppr2EIDLookUpUserControl']).Attributes["Value"].Value;
我嘗試使用SelectSingleNode(string),但這給了我一個null引用異常。 請建議我該如何進行。 我是XML的絕對入門者。
一種使用相同方法的可能方法:
string a =
xnodePagedata.SelectSingleNode("//control[@id='busRowOAppr2EIDLookUpUserControl']/field/valuefield/@value")
.Value;
更新:
如果一個<control>
有多個<valuefield>
並且您想要所有value
s,請使用SelectNodes()
例如:
var values =
xPagedata.SelectNodes("//control[@id='busRowOAppr2EIDLookUpUserControl']/field/valuefield/@value");
foreach (XmlNode value in values)
{
Console.WriteLine(value.Value);
}
您可以使用XDocument
:使用Descendants("control")
獲取所有控件,然后使用Where
子句過濾它們,然后使用SelectMany
獲取valuefield值的扁平集合。
XDocument doc = XDocument.Load(filepath);
var result = doc.Descendants("control")
.Where(i => (string)i.Attribute("id") == "busRowOAppr2EIDLookUpUserControl")
.SelectMany(i => i.Descendants("valuefield")
.Select(j => j.Attribute("value")))
.ToList();
結果如下:
result Count = 2
[0] {value="709227"}
[1] {value="_JohnDoe@Wonder.com"}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.