我有以下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 Elements和Descendants,但是通过调用oXDocument.Descendants("Responses").ToString();
没有工作。
我是否必须遍历检查每个XElements的所有XElements然后附加到字符串变量?
答案 0 :(得分:1)
函数Descendants
返回XElement
的枚举,因此您需要选择特定元素。
如果要获取包含所有子节点的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
答案 1 :(得分:0)
Descendants()
方法接受输入元素名称,它将返回一组节点,然后您还需要获取您感兴趣的元素。
您可以使用linq和XDocument
来提取信息。例如,以下代码从每个Name
节点中提取Response
元素值并打印出来:
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")
为每个<Element>
元素获取<Response>
标记,然后使用.Value
属性我们得到标记之间的值。