这是使用XDocument解析的XML:
<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
我只希望键和值节点显示值。喜欢:
Others
Bank
Key : FirstKey
Value: FirstValue
Bank
Key : SecondKey
Value: SecondValue
....
XElement.Value
返回一个字符串,其中包含此元素的所有文本内容,但您只想显示每个XText
直接拥有的XElement
子节点的连接值。 (这些是保存元素的实际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
演示小提琴here。