将特定XML节点的长文本保存到文本文件中

时间:2014-10-06 18:28:42

标签: c# xml

我的XML文件来自包含Base64字符串(2,000,000个字符)的第三方程序

我想将特定节点的内部文本保存到文本文件(大约70,000个字符),问题是由于文件中的最后一行,我无法将此文件作为XML文件处理。我现在要告诉你

<?xml version="1.0" encoding="utf-16"?>
<cProgramECUPackageOut xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                       xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                       ID="b0eb0c7e-a3de-4bc7-9e63-7a082f8a2bc5" 
                       Version="16.01" xmlns="cProgramECUPackageOut">
    <text1>N    </text1>
    <No>487382</No>
    <text2>128</text2>
    <Data1>21110107</Data1>
    <Data2>21554863</Data2>
    <!-- I Need the inner text of this node -->
    <DST2>W01TV0NvbnRlbnRdDQo....about 70,000 Char</DST2>  
.
.
.
</cProgramECUPackageOut>3345802116632N    20814620154201445546

正如您所看到的,XML文件中的最后一行在最后一个节点之后有文本,该节点在将文件读取为XML时会出错。我试图将文件作为文本处理,但它没有复制完整的内部文本。

我尝试了这个相关的线程,但没有完成工作。

How to get innertext in an XML

Get XML Innertext

Regex + Remove all text before match

Get text between two words

我是C#的新手,但我努力寻找答案。

1 个答案:

答案 0 :(得分:0)

我发现这个问题的答案是“Adam V”Said

所以我尝试了,我想分享它

1-替换XML文件中的最后一行

        File.Copy(XMLFileName, XMLFileName2);
        string Filepath = File.ReadAllText(XMLFileName2); 
        string fakeEnd = "</cProgramECUPackageOut>";
         lastlineStr = File.ReadLines(XMLFileName2).Last(); // the last line in the XML file
        Filepath = Filepath.Replace(lastlineStr,fakeEnd);
        File.WriteAllText(newPath, Filepath, Encoding.Unicode); 

2-以XML格式读取文件使用:XmlDocument获取innertext

XmlDocument doc = new XmlDocument();
        doc.Load(newPath);
        XmlNode node = doc.DocumentElement.GetElementsByTagName("DST2").Item(0);
        StringBuilder sb = new StringBuilder();
        sb.Append(node.InnerText);
        DST2 = sb.ToString();
        File.WriteAllText(@"c:\textFile.txt", sb.ToString(), Encoding.Unicode);