C # 2.0 читать и копировать XML-файл построчно? - PullRequest
2 голосов
/ 02 сентября 2010

Я получил XML-файл fileOri.xml, и есть несколько строк, таких как

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

, и я планирую скопировать эти строки в другой файл fileDes.xml.Есть ли быстрый и легкий способ?

Ответы [ 3 ]

3 голосов
/ 02 сентября 2010

Добавление ответа к 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, но с выводом текста.

2 голосов
/ 02 сентября 2010
  1. Загрузка XML в объект XmlDocument
  2. Использование XPath, подобного // SubItem, для получения всех элементов SubItem
  3. Создание нового объекта XmlDocument
  4. Loop throughсписок узлов, полученный на шаге 2, и запишите элементы.

Однако вы также можете использовать таблицу стилей и затем использовать transform для создания нового xml.

0 голосов
/ 02 сентября 2010

Если вы просто хотите скопировать весь файл, используйте File.Copy

. Если вы хотите скопировать некоторые узлы, откройте исходный код, используя XmlDocument, запустите запрос zpath, используя SelectNodesитерируйте полученную коллекцию узлов и скопируйте .OuterXml каждого узла в новый файл.

...