如何选择XML节点,仅给出属性名称

时间:2013-10-24 09:45:18

标签: c# xml

我有一个XML文件,如下所示

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

现在我只给出属性名称“attribute3”。我怎样才能获得节点的名称?

3 个答案:

答案 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;
    }