C#2.0逐行读取和复制Xml文件?

时间:2010-09-02 05:35:53

标签: c# xml file-io c#-2.0

我有一个Xml文件fileOri.xml,还有一些像

这样的行

<SubItem name='somename' value='someVal'></SubItem>

我计划将这些行复制到另一个文件fileDes.xml。有快速的&amp;轻松的方式?

3 个答案:

答案 0 :(得分:3)

添加到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但使用文本输出。

答案 1 :(得分:2)

  1. 将XML加载到XmlDocument对象中
  2. 使用类似于// SubItem的XPath来获取所有SubItem元素
  3. 创建新的XmlDocument对象
  4. 循环执行步骤2中获取的节点列表并写出元素。
  5. 但是,您也可以使用样式表,然后使用transform创建新的xml。

答案 2 :(得分:0)

如果您只想复制整个文件,请使用File.Copy

如果要复制某些节点,请使用XmlDocument打开源,使用SelectNodes对其运行zpath查询,迭代生成的节点集合并将每个节点的.OuterXml复制到新文件。