使用 XDocument 将选定节点转换为字符串

Using XDocument to convert selected node to string

我有以下 XML 示例。

<?xml version="1.0" encoding="utf-8"?>
  <GlobalResponses>
   <Filters>
     <FilterId>11</FilterId>
     <FilterId>5</FilterId>
     <FilterId>10</FilterId>
   </Filters>
   <Responses>
     <Response>
       <Name>Bob</Name>
     </Response>
     <Response>
       <Name>Jim</Name>
     </Response>
     <Response>
       <Name>Steve</Name>
     </Response>    
   </Responses>  
  </GlobalResponses>

使用 XDocument,我怎样才能只获取 <Responses> 父节点和子节点,并将它们转换为字符串变量。我查看了 XDocument 元素和后代,但调用 oXDocument.Descendants("Responses").ToString(); 无效。

我是否必须遍历所有 XElements 检查每个 XElements 然后附加到字符串变量?

函数 Descendants returns 枚举 XElement,因此您需要 select 特定元素。

如果你想获得XML元素的所有子节点,你可以使用:

// assuming that you only have one tag Responses.
oXDocument.Descendants("Responses").First().ToString();

结果是

<Responses>
  <Response>
    <Name>Bob</Name>
  </Response>
  <Response>
    <Name>Jim</Name>
  </Response>
  <Response>
    <Name>Steve</Name>
  </Response>
</Responses>

如果你想获取子节点并将它们连接成单个字符串,你可以使用

// Extract list of names
var names = doc.Descendants("Responses").Elements("Response").Select(x => x.Value);
// concatenate
var result = string.Join(", ", names);

结果是Bob, Jim, Steve

Descendants() 方法需要输入元素名称,它会 return 你的节点集合,然后你需要从这些节点中进一步获取你感兴趣的元素。

您可以使用 linq 和 XDocument 来提取信息。例如,以下代码从每个 Response 节点中提取 Name 元素值并打印出来:

var nodes = from response in Doc.Descendants("Response")
            select response.Element("Name").Value;

foreach(var node in nodes)
    Console.WriteLine(node);

上面的 Doc.Descendants("Response") 将获取所有 <Response> 元素,然后我们使用 response.Element("Name") 获取每个 <Response> 元素的 <Element> 标签,并且然后使用 .Value 属性 我们得到标签之间的值。

See this working DEMO fiddle.