1

我有大量需要“清理”的 XML 数据。Xml 看起来像这样:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:body>
        <w:p>       
                    <w:t>F_ck</w:t>
            <!-- -->
                <w:t>F_ck</w:t>
            <!-- -->
                            <w:t>F_ck</w:t>
        </w:p>
    </w:body>
</w:document>

我想<w:t>用值“F_ck”标识 -elements 并用其他值替换该值。我需要清理的元素将分散在整个文档中。

我需要代码尽可能快地运行并且内存占用尽可能小,所以我不愿意使用XDocument我在这里和其他地方找到的 (DOM) 方法。

XmlTextReader数据作为包含 Xml 数据的流提供给我,我的直觉告诉我我需要XmlTextWriter.

我最初的想法是做一个 SAX 模式,只向前运行 Xml 数据并将其“管道”到 . XmlTextWriter,但我找不到这样做的智能方法。

我写了这段代码:

var reader = new StringReader(content);
var xmltextReader = new XmlTextReader(reader);
var memStream = new MemoryStream();
var xmlWriter = new XmlTextWriter(memStream, Encoding.UTF8);

while (xmltextReader.Read())
{
    if (xmltextReader.Name == "w:t")
    {
        //xmlWriter.WriteRaw("blah");
    }
    else
    {
        xmlWriter.WriteRaw(xmltextReader.Value);
    }
}

上面的代码只取元素声明等的值,所以没有括号或任何东西。我意识到我可以编写专门执行的代码.WriteElement().WriteEndElement()等等NodeType,但我担心这很快就会变得一团糟。

所以问题是:

XmlTextReader我如何——以一种很好的XmlTextWriter方式——将从

4

1 回答 1

0
于 2015-11-05T15:20:30.830 回答