C#2.0 逐行读取和复制 Xml 文件?
Posted
技术标签:
【中文标题】C#2.0 逐行读取和复制 Xml 文件?【英文标题】:C#2.0 read and copy Xml file line by line? 【发布时间】:2010-09-02 05:35:52 【问题描述】:我得到了一个 Xml 文件 fileOri.xml
,其中有一些类似
<SubItem name='somename' value='someVal'></SubItem>
我打算将这些行复制到另一个文件fileDes.xml
。有没有快速简便的方法?
【问题讨论】:
【参考方案1】:添加到 Rajs 答案,以下是使用 Transform 的方法:
代码
XmlTextReader reader = new XmlTextReader("C:\\fileOri.xml");
XmlTextWriter writer = new XmlTextWriter("C:\\fileDes.xml", Encoding.UTF8);
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load("C:\\MyStylesheet.xslt");
transform.Transform(reader, writer);
样式表
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<!-- define the root element for your destination document -->
<xsl:element name="root">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="//SubItem">
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
通过转换执行此操作使您可以灵活地更改您想要复制的内容,而无需在将来触及可执行文件 - 只需根据您的需要修改 Xslt。
提示
您的问题表明您可能更愿意使用带有行项目的平面文本文件进行进一步处理 - 在这种情况下,您仍然可以使用 Xslt,但可以使用文本输出。
【讨论】:
@Nano,不客气。我将更新示例代码以允许使用 Xslt 转换为 Xml 或 CSV 文件。【参考方案2】:-
在 XmlDocument 对象中加载 XML
使用像 //SubItem 这样的 XPath 来获取所有 SubItem 元素
创建一个新的 XmlDocument 对象
遍历第2步得到的节点列表,写出元素。
但是,您也可以使用样式表,然后使用转换来创建新的 xml。
【讨论】:
转型确实是最好的解决方案。【参考方案3】:如果您只想复制整个文件,请使用 File.Copy
如果要复制一些节点,请使用XmlDocument
打开源代码,使用SelectNodes
对其运行zpath 查询,迭代生成的节点集合并将每个节点的.OuterXml
复制到新文件。
【讨论】:
以上是关于C#2.0 逐行读取和复制 Xml 文件?的主要内容,如果未能解决你的问题,请参考以下文章