[英]Linq to Xml question: struggling with a simple example
我试图将XML用于一些简单的格式设置和嵌入式链接。 我正在尝试使用Linq to Xml来解析XML,但是我正努力解析其中包含嵌入元素的文本“ Value”。 例如,这可能是我要解析的一部分XML:
<description>A plain <link ID="1">table</link> with a green hat on it.</description>
本质上,我想通过描述节点的值中的“运行”进行枚举。 在上面的示例中,将有一个文本节点,其值为“ A plain”,其后是一个“ link”元素,其值为“ table”,然后是另一个文本节点,其值为“”,上面带有绿色的帽子。 “。
我该怎么做呢? 我尝试枚举根XElement的Elements()枚举,但这仅返回链接元素,Descendants()也是如此。 DescendantNodes()确实返回了所有节点,但它也返回了链接元素的子节点。 在这种情况下,除了包含“表”的元素之外,还包含一个文本节点。
您将需要访问Nodes()
方法 ,检查XmlNodeType
,并进行适当的转换以访问每个对象的属性和方法。
例如:
var xml = XElement.Parse(@"<description>A plain <link ID=""1"">table</link> with a green hat on it.</description>");
foreach (var node in xml.Nodes())
{
Console.WriteLine("Type: " + node.NodeType);
Console.WriteLine("Object: " + node);
if (node.NodeType == XmlNodeType.Element)
{
var e = (XElement)node;
Console.WriteLine("Name: " + e.Name);
Console.WriteLine("Value: " + e.Value);
}
else if (node.NodeType == XmlNodeType.Text)
{
var t = (XText)node;
Console.WriteLine(t.Value);
}
Console.WriteLine();
}
只需在您的description元素上使用Nodes()
方法即可。
var xmlStr = @"<description>A plain <link ID=""1"">table</link> with a green hat on it.</description>";
var descriptionElement = XElement.Parse(xmlStr);
var nodes = descriptionElement.Nodes();
foreach (var node in nodes)
Console.WriteLine("{0}\t\"{1}\"", node.NodeType, node);
产量:
Text "A plain "
Element "<link ID="1">table</link>"
Text " with a green hat on it."
XElement.Nodes()将仅枚举顶级子节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.