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 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Objective C - 创建文本文件以在 Cocoa 中逐行读取和写入

vbs逐行读取txt文件并且逐行复制文件到其它文件中

C++读取XML文件

逐行读取文件的最快方法? [复制]

Bash怎么逐行读取一个文件

在nodejs中逐行读取文件没有简单的方法吗? [复制]