1

我有一个如下的 XML 文件

<NODE1 attribute1 = "SomeValue" attribute2 = "SomeOtherValue" />
<NODE2 attribute3 = "SomeValue" attribute4 = "SomeOtherValue" />

现在我只给出了属性名称“attribute3”。如何获取节点的名称?

4

3 回答 3

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已定义属性的节点集合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]");
于 2013-10-24T09:48:54.140 回答
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;
于 2013-10-24T09:49:23.627 回答
0

以这种方式尝试

    string nodeName;
    if(Node.Attributes.Cast<XmlAttribute>().Any(x => x.Name == "attribute3"))
    {
        nodeName=Node.Name;
    }
于 2013-10-24T09:51:43.887 回答