[英]How to access element name using attribute value from Xml
I have an XML file with code: 我有一个带有代码的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<car_ads>
<car_make make="suzuki" adj_kw="null">
<model data_type="string"adj_kw="null" class="کار_ماڈل ">
<model_instance>ALTO</model_instance>
<model_instance>KHYBER</model_instance>
</model>
<year data_type="integer" adj_kw="yes" class="ایر ">
<adj_kw>ماڈل </adj_kw>
<adj_kw>ء</adj_kw>
</year>
<price data_type="string" adj_kw="yes" class=" قیمت " >
<adj_kw>قیمت </adj_kw>
<adj_kw>ڈیمانڈ </adj_kw>
</price>
</car_make>
<car_make make="سوزوکی" adj_kw="null">
<model data_type="string" adj_kw="null" class="کار_ماڈل ">
<model_instance>alto</model_instance>
<model_instance>آلٹو</model_instance>
</model>
<year data_type="integer" adj_kw="yes" class="ایر ">
<adj_kw>ماڈل </adj_kw>
<adj_kw>ء</adj_kw>
<adj_kw>ایئرآفمینوفیکچرنگ </adj_kw>
</year>
<price data_type="string" adj_kw="yes" class=" قیمت " >
<adj_kw>قیمت </adj_kw>
<adj_kw>ڈیمانڈ </adj_kw>
</price>
</car_make>
</car_ads>
I am parsing this using XmlDocument in c# 我在C#中使用XmlDocument对此进行解析
string xmlText = File.ReadAllText(@"G:\\car_xml_final.xml");
var doc = new XmlDocument();
doc.LoadXml(xmlText);
If I know attribute value (egin my example attribute class =" ایر") I want to get its corresponding element name (ie element= "year"). 如果我知道属性值(例如,在我的示例属性类=“ایر”中),我想获取其相应的元素名称(即element =“ year”)。
Thanks @Charles Mager for pointing out the difference between XmlDocument
and XDocument
. 感谢@Charles Mager指出
XmlDocument
和XDocument
之间的区别。 If you use XDocument
, you can use either LINQ: 如果使用
XDocument
,则可以使用LINQ之一:
var element = doc.Root.Descendants().FirstOrDefault(e => e.Attribute("class") == " ایر");
var elementName = element.Name;
or XPath: 或XPath:
var element = doc.XPathSelectElement("//[@class=' ایر']");
var elementName = element.Name;
to get your desired result. 得到您想要的结果。
If you stick to XmlDocument
, there's the SelectSingleNode
method: 如果您坚持使用
XmlDocument
,则可以使用SelectSingleNode
方法:
var element = doc.DocumentElement.SelectSingleNode("descendant::[class=""' ایر'""]");
As mentioned in the other answer, you can use SelectSingleNode()
or SelectNodes()
to get sepcific element(s) from XmlDocument
passing an XPath expression as parameter, for example : 如另一个答案中所述,您可以使用
SelectSingleNode()
或SelectNodes()
)从XmlDocument
获取SelectNodes()
元素,并通过XPath表达式作为参数,例如:
var result = doc.SelectNodes("//*[@class='ایر ']");
foreach (XmlNode node in result)
{
//print element name
Console.WriteLine(node.Name);
}
brief explanation about XPath being used : 有关使用的XPath的简要说明:
//*
: select all elements regardless of the name ( *
), anywhere in the XML document ( //
)... //*
:在XML文档( //
)中的任何位置选择所有名称( *
)无关的元素... [@class='some_class_here']
: ...having class attribute value equals certain class name [@class='some_class_here']
:...具有的类属性值等于某些类名
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.