我有一些xml(在一个文件中,但可以是一个字符串),我需要解析,例如:
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlText);
Run Code Online (Sandbox Code Playgroud)
给出以下XML:
<foo>
<cat>...</cat>
<cat>...</cat>
<dog>...</dog>
<cat>...</cat>
<dog>...</dog>
</foo>
Run Code Online (Sandbox Code Playgroud)
我不知道我怎么能提取所有cat与dog元素,并把它们放到下面的输出: -
<foo>
<cat>...</cat>
<cat>...</cat>
....
</foo>
Run Code Online (Sandbox Code Playgroud)
和狗一样
有什么绝招来提取这些节点,并把它们放在不同XMLDocuments.
使用Linq到XML,因为它有一个更好的API.
var doc = XElement.Parse(
@"<foo>
<cat>...</cat>
<cat>...</cat>
<dog>...</dog>
<cat>...</cat>
<dog>...</dog>
</foo>");
doc.Descendants("dog").Remove();
Run Code Online (Sandbox Code Playgroud)
doc 现在包含这个:
<foo>
<cat>...</cat>
<cat>...</cat>
<cat>...</cat>
</foo>
Run Code Online (Sandbox Code Playgroud)
编辑:
虽然Linq to XML本身提供了一个很好的API来处理XML,但Linq的强大功能及其投影功能使您可以根据需要调整数据的形状.
例如,考虑一下.这里的后代元素按名称分组并投影到一个新root元素中,然后将其包装成一个XDocument.请注意,这会创建一个可枚举的XDocument.
var docs=
from d in doc.Descendants()
group d by d.Name into g
select new XDocument(
new XElement("root", g)
);
Run Code Online (Sandbox Code Playgroud)
docs 现在包含:
<root>
<cat>...</cat>
<cat>...</cat>
<cat>...</cat>
</root>
---
<root>
<dog>...</dog>
<dog>...</dog>
</root>
Run Code Online (Sandbox Code Playgroud)
哦,顺便说一下.该Descendants方法遍历所有后代元素,Elements如果您只想要直接子元素,请使用此方法.
由于您正在使用XmlDocument:从同一文件加载两次并删除不需要的节点。以下链接向您展示了如何操作:从 XmlDocument 中删除节点。
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlText);
XmlNode root = doc.DocumentElement;
nodeList = root.SelectNodes("//cat");
foreach (XmlNode node on nodeList)
{
root.RemoveChild(node);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
584 次 |
| 最近记录: |