XDocument Descendants() 显示父节点中的所有子值
XDocument Descendants() displays all child values in the parent node
这是要解析的 XML,使用 XDocument:
<e xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FormValues />
<Others>
<Bank>
<Key>FirstKey</Key>
<Value>FirstValue</Value>
</Bank>
<Bank>
<Key>SecondKey</Key>
<Value>SecondValue</Value>
</Bank>
<Bank>
<Key>ThirdKey</Key>
<Value>ThirdValue</Value>
</Bank>
<Bank>
<Key>FourthKey</Key>
<Value>FourthValue</Value>
</Bank>
</Others>
<Prob>ProbValue</Prob>
<URL>http://example.com/</URL>
<Method>GET</Method>
</e>
如果我这样做:
string doc = "<e xmlns:xsd..> ..... </e>";
System.Xml.Linq.XDocument docNew = System.Xml.Linq.XDocument.Parse(doc);
var elements = docNew.Root.Descendants();
@foreach (var element in elements)
{
<label>@element.Name.ToString():</label><span>@element.Value.ToString()</span>
}
它显示:
FormValues:
Others: FirstKeyFirstValueSecondKeySecondValueThirdKeyThirdValueFourthKeyFourthValue
Bank : FirstKeyFirstValue
Key : FirstKey
Value: FirstValue
Bank : SecondKeySecondValue
Key : SecondKey
Value: SecondValue
Bank : ThirdKeyThirdValue
Key : ThirdKey
Value: ThirdValue
Bank : FourthKeyFourthValue
Key : FourthKey
Value: FourthValue
Prob : ProbValue
URL : http://example.com/
Method:GET
我只希望Key节点和Value节点显示值。
喜欢:
Others
Bank
Key : FirstKey
Value: FirstValue
Bank
Key : SecondKey
Value: SecondValue
....
XElement.Value
returns a string that contains all of the text content of this element, but you want to display just the concatenated value(s) of the XText
child nodes directly owned by each XElement
. (These are the nodes that hold the actual character data 一个元素。)
这可以按如下方式完成:
var docNew = System.Xml.Linq.XDocument.Parse(doc);
foreach (var element in docNew.Root.Descendants())
{
var textValue = string.Concat(element.Nodes().OfType<System.Xml.Linq.XText>().Select(tx => tx.Value));
Console.WriteLine(string.Format("{0}: {1}", element.Name.ToString(), textValue));
}
这个逻辑可以提取到一个扩展方法中:
public static partial class XNodeExtensions
{
public static string LocalValue(this XContainer node)
{
if (node == null)
return null;
return string.Concat(node.Nodes().OfType<XText>().Select(tx => tx.Value));
}
}
并使用如下:
var textValue = element.LocalValue();
它打印以下内容:
FormValues:
Others:
Bank:
Key: FirstKey
Value: FirstValue
Bank:
Key: SecondKey
Value: SecondValue
Bank:
Key: ThirdKey
Value: ThirdValue
Bank:
Key: FourthKey
Value: FourthValue
Prob: ProbValue
URL: http://example.com/
Method: GET
演示 fiddle here.
这是要解析的 XML,使用 XDocument:
<e xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FormValues />
<Others>
<Bank>
<Key>FirstKey</Key>
<Value>FirstValue</Value>
</Bank>
<Bank>
<Key>SecondKey</Key>
<Value>SecondValue</Value>
</Bank>
<Bank>
<Key>ThirdKey</Key>
<Value>ThirdValue</Value>
</Bank>
<Bank>
<Key>FourthKey</Key>
<Value>FourthValue</Value>
</Bank>
</Others>
<Prob>ProbValue</Prob>
<URL>http://example.com/</URL>
<Method>GET</Method>
</e>
如果我这样做:
string doc = "<e xmlns:xsd..> ..... </e>";
System.Xml.Linq.XDocument docNew = System.Xml.Linq.XDocument.Parse(doc);
var elements = docNew.Root.Descendants();
@foreach (var element in elements)
{
<label>@element.Name.ToString():</label><span>@element.Value.ToString()</span>
}
它显示:
FormValues:
Others: FirstKeyFirstValueSecondKeySecondValueThirdKeyThirdValueFourthKeyFourthValue
Bank : FirstKeyFirstValue
Key : FirstKey
Value: FirstValue
Bank : SecondKeySecondValue
Key : SecondKey
Value: SecondValue
Bank : ThirdKeyThirdValue
Key : ThirdKey
Value: ThirdValue
Bank : FourthKeyFourthValue
Key : FourthKey
Value: FourthValue
Prob : ProbValue
URL : http://example.com/
Method:GET
我只希望Key节点和Value节点显示值。 喜欢:
Others
Bank
Key : FirstKey
Value: FirstValue
Bank
Key : SecondKey
Value: SecondValue
....
XElement.Value
returns a string that contains all of the text content of this element, but you want to display just the concatenated value(s) of the XText
child nodes directly owned by each XElement
. (These are the nodes that hold the actual character data 一个元素。)
这可以按如下方式完成:
var docNew = System.Xml.Linq.XDocument.Parse(doc);
foreach (var element in docNew.Root.Descendants())
{
var textValue = string.Concat(element.Nodes().OfType<System.Xml.Linq.XText>().Select(tx => tx.Value));
Console.WriteLine(string.Format("{0}: {1}", element.Name.ToString(), textValue));
}
这个逻辑可以提取到一个扩展方法中:
public static partial class XNodeExtensions
{
public static string LocalValue(this XContainer node)
{
if (node == null)
return null;
return string.Concat(node.Nodes().OfType<XText>().Select(tx => tx.Value));
}
}
并使用如下:
var textValue = element.LocalValue();
它打印以下内容:
FormValues:
Others:
Bank:
Key: FirstKey
Value: FirstValue
Bank:
Key: SecondKey
Value: SecondValue
Bank:
Key: ThirdKey
Value: ThirdValue
Bank:
Key: FourthKey
Value: FourthValue
Prob: ProbValue
URL: http://example.com/
Method: GET
演示 fiddle here.