我正在尝试将XML用于一些简单的格式化和嵌入式链接。我正在尝试使用Linq解析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()确实返回了所有节点,但它也返回了链接元素的子节点。在这种情况下,除了包含它的元素之外,还包含一个包含“table”的文本节点。
答案 0 :(得分:1)
您需要访问Nodes()
method,检查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();
}
答案 1 :(得分:1)
只需在说明元素上使用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."
答案 2 :(得分:1)
XElement.Nodes()将仅枚举顶级子节点。