У меня есть 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="[email protected]">emailid</valuefield>
</field>
</control>
<control id="busDelegationFromDate123" controltype="business">
<field controlvaluetype="single" key="txtCalanderDateWithImage_UserControl">
<valuefield value="" />
</field>
</control>
</CPageDataXML>
Я хочу прочитать значение поля значения, где id = "busRowOAppr2EIDLookUpUserControl"
Код С#: Это код для загрузки 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
чтобы получить сглаженный набор значений поля значения.
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="[email protected]"}
System.Xml.Linq.XDocument
xmlns
? Пожалуйста, опубликуйте код, который у вас есть.