我是一名中级 c# 程序员,需要有关 XML 文档的帮助。
我需要执行以下操作:
- 解析相当大的 XML 文档 A
- 提取特定元素和值
- 将这些值存储在新的 XML 文档 B 中(元素名称将不同)
XML 文档 B 元素将具有不同的名称,但从文档 A 中提取的值相同。
有人可以帮助实现这一目标的最佳设计吗?
我应该使用数据协定/序列化,我应该使用枚举来存储 XML 元素…………。
请概述实现上述目标的最佳方法或将我引导至示例
如果您要阅读 XML,然后基于它创建 XML,那么您可能需要考虑使用 XSLT。这是一种使用 XQuery 和 XPath 将 XML 文档转换为新 XML 文档的方法。如果您将来也打算用 XML 做这种类型的事情,那么它是值得学习的。
这是代码项目教程的链接:http: //www.codeproject.com/Articles/460968/XSLT-2-0-programming-basics
我会推荐LINQ to XML
如果您只是严格地将一个 XML 文档翻译成另一个,您可能还会考虑编写一个 XSLT 来进行翻译。
我通常使用XmlDocument
类和 XPath
这是一个使用 XML 文档的示例,从一个文档中获取值并将它们放入另一个文档中。
XmlDocument xDoc = new XmlDocument();
xDoc.Load("filename.xml");
string val = xDoc.SelectSingleNode("//ElementName").Attributes["attributeName"].Value;
XmlDocument xDoc2 = new XmlDocument();
XmlElement ele = xDoc2.CreateElement("ElementName2");
XmlAttribute att = xDoc2.CreateAttribute("attributeName2");
att.Value = val;
ele.Attributes.Append(att);
xDoc2.AppendChild(ele);
一些伪代码和信息。由于您没有提供任何信息,因此我无法具体说明。
1 - 加载您Xml A
使用的XmlDocument
.
var aDoc = new XmlDocument();
aDoc.Load("someFile.xml");
2 - 既然你说你想要一个特定的节点,你可以使用xPath来提取该节点。(xPath 只是一个例子)
XmlNode extractedNode = aDoc.SelectSingleNode(/rootNode/parentNode);
3 - 现在你已经提取了你的节点,是时候把它放在一个新的文档中了bDoc
(完全像加载的那样aDoc
)。
XmlNode rootNode = bDoc.DocumentElement;
rootNode.AppendChild(extractedNode);
非常基本,一点也不具体,但我能提出你当前的问题。