我有一个如下的 XML 文件
<NODE1 attribute1 = "SomeValue" attribute2 = "SomeOtherValue" />
<NODE2 attribute3 = "SomeValue" attribute4 = "SomeOtherValue" />
现在我只给出了属性名称“attribute3”。如何获取节点的名称?
使用 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
已定义属性的节点集合attribute3
。您可以使用FirstOrDefault
. 如果您只想获取名称,请使用node.Name.LocalName
.
更新:我不建议您使用 XmlDocument,但如果您已经在操作此 xml 文档,那么使用 XDocument 第二次加载它可能效率低下。因此,您可以使用 XPathNavigator 选择节点:
var doc = new XmlDocument();
doc.Load(path_to_xml);
var naviagator = doc.CreateNavigator();
var nodeIterator = naviagator.Select("//*[@attribute3]");
在文件顶部添加以下命名空间:
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;
以这种方式尝试
string nodeName;
if(Node.Attributes.Cast<XmlAttribute>().Any(x => x.Name == "attribute3"))
{
nodeName=Node.Name;
}