简体   繁体   English

自动格式化长的externalXml字符串

[英]Automatically format a long outerXml string

I have multiple large XML files and am trying to extract 5 instances of a specific element and its children. 我有多个大型XML文件,正在尝试提取特定元素及其子元素的5个实例。 I have the code all set, however, I HAVE to use StreamWriter to write out the xml. 我已经设置了所有代码,但是,我必须使用StreamWriter来写出xml。 How can I do this so that it comes out properly indented, etc. 我该怎么做才能使其正确缩进等等。

The string looks similar to this: 该字符串类似于以下内容:

<SampleMAIN><Sample type="1"><Sample_Batch>123
</Sample_Batch><SampleMethod>
</SampleMethod>
</Sample></SampleMAIN>

I want it to look like this: 我希望它看起来像这样:

<SampleMAIN>
    <Sample type="1">
        <Sample_Batch>123
    </Sample_Batch>
        <SampleMethod>1
    </SampleMethod>
</SampleMAIN>

With using StreamWriter, the below code will output the format that you need and append to an existing xml file. 使用StreamWriter,下面的代码将输出所需的格式并附加到现有的xml文件中。

Private Sub Button1_Click(sender As System.Object, _
                          e As System.EventArgs) Handles Button1.Click

    Dim sw As System.IO.StreamWriter

    Dim St As String = "1"
    Dim Sb As String = "123"
    Dim Sm As String = "1"

    sw = File.AppendText("C:\XML_Files\sampler_02.xml")
    sw.WriteLine("<SampleMAIN>")
    sw.WriteLine("    <Sample type=" & """" & St & """" & ">")
    sw.WriteLine("        <Sample_Batch>" & Sb)
    sw.WriteLine("    </Sample_Batch>")
    sw.WriteLine("        <SampleMethod>" & Sm)
    sw.WriteLine("    </SampleMethod>")
    sw.WriteLine("</SampleMAIN>")
    sw.Close()

End Sub

So for anyone who may come across this and was interested in how I resolved it, here is what I used... 因此,对于可能遇到此问题并对我的解决方案感兴趣的任何人,这就是我所使用的...

    Dim dir As New DirectoryInfo("D:\data")
    Dim sw As New StreamWriter("C:\Documents\largeFile.xml")
    Dim xd As New XmlDocument
    Dim iCount As Integer

    sw.WriteLine("<?xml version=""1.0"" encoding=""ISO-8859-1""?>" & vbCrLf & "<Root>")

    For Each fi As FileInfo In dir.GetFiles()
        xd.Load(fi.FullName)
        iCount = 0

        For Each xn As XmlNode In xd.SelectNodes("//Root")          
            For Each xe As XmlElement In xn.ChildNodes
                iCount += 1
                sw.WriteLine(xe.OuterXml.ToString)
                If iCount = 5 Then Exit For
            Next
            Exit For
        Next

    Next

    sw.WriteLine("</Root>")

    sw.Flush() : sw.Close() : sw.Dispose()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM