我有一个XML文件,如下所示
<NODE1 attribute1 = "SomeValue" attribute2 = "SomeOtherValue" />
<NODE2 attribute3 = "SomeValue" attribute4 = "SomeOtherValue" />
现在我只给出属性名称“attribute3”。我怎样才能获得节点的名称?
答案 0 :(得分:1)
使用LINQ to XML:
XDocument xdoc = XDocument.Load(path_to_xml);
var nodes = xdoc.Descendants().Where(e => e.Attribute("attribute3") != null);
或者使用XPath(正如Marvin建议的那样):
var nodes = xdoc.XPathSelectElements("//*[@attribute3]");
两个查询都将返回已定义属性XElement
的{{1}}个节点的集合。您可以使用attribute3
获得第一个。如果您想获得名称,请使用FirstOrDefault
。
更新:我不建议你使用XmlDocument,但是如果你已经在操作这个xml文档,那么第二次使用XDocument加载它可能效率很低。因此,您可以使用XPathNavigator选择节点:
node.Name.LocalName
答案 1 :(得分:1)
在文件顶部添加以下命名空间:
using System.Xml.Linq;
试试这个(假设 input.xml 是XML文件的路径):
var xml = XDocument.Load("input.xml");
string nodeName;
var node = xml.Descendants()
.FirstOrDefault(e => e.Attribute("attribute3") != null);
if (node != null)
nodeName = node.Name.LocalName;
答案 2 :(得分:0)
以这种方式尝试
string nodeName;
if(Node.Attributes.Cast<XmlAttribute>().Any(x => x.Name == "attribute3"))
{
nodeName=Node.Name;
}