繁体   English   中英

Linq to Xml问题:举一个简单的例子

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM