使用XDocument查找特定的xml节点

时间:2018-10-07 09:38:04

标签: c# xml linq

我正在尝试使用XDocument在xml中查找特定节点。 xml还具有要导入的名称空间。

下面是xml规范

<?xml version="1.0" encoding="UTF-8"?>
<tns:response xmlns:tns="http://amazon.com/amazonservices">
<tns:responseDirect>
    <tns:responseExtract>
          <tns:A>ExtractName</tns:A>
    </tns:responseExtract>
    <tns:responses>
          <tns:Name>Response1</tns:Name>
          <tns:Include>No</tns:Include>
    </tns:responses>
    <tns:responses>
          <tns:Name>Response2</tns:Name>
          <tns:Include>Yes</tns:Include>
    </tns:responses>
    <tns:responses>
          <tns:Name>Response3</tns:Name>
    </tns:responses>
</tns:responseDirect>

我想检索所有响应,并且只检索那些具有包含节点的节点。

我正在尝试下面的代码来获取它,但没有任何节点。

XDocument document =  XDocument.Parse(xml);


var name = from nm in document.Elements("responses")
           select nm;

任何人都可以让我知道如何解决此问题吗?我只需要获取响应节点即可。

预先感谢

1 个答案:

答案 0 :(得分:1)

尝试以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            XNamespace ns = doc.Root.GetNamespaceOfPrefix("tns");

            var results = doc.Descendants(ns + "responses")
                .Where(x => x.Elements(ns + "Include").Any())
                .Select(x => new {
                    include = (string)x.Element(ns + "Include"),
                    name = (string)x.Element(ns + "Name")
                }).ToList();
        }
    }
}