将文件夹中的XML文件合并为一个XML
我有一百个XML,看起来像下面的例子,我想在VB.NET中创建一个代码,将这些文件合并成一个将文件夹中的XML文件合并为一个XML,xml,vb.net,multithreading,merge,Xml,Vb.net,Multithreading,Merge,我有一百个XML,看起来像下面的例子,我想在VB.NET中创建一个代码,将这些文件合并成一个 <report> <Host>10.10.10.4</Host> <Ping>True</Ping> <PingResult>True</PingResult> <start>27/08/2014 14:11:17</start> <end>27/08/2014 14:11:22<
<report>
<Host>10.10.10.4</Host>
<Ping>True</Ping>
<PingResult>True</PingResult>
<start>27/08/2014 14:11:17</start>
<end>27/08/2014 14:11:22</end>
<id>86</id>
<Total>00:00:05</Total>
<success>False</success>
</report>
<report>
<Host>10.10.10.5</Host>
<Ping>True</Ping>
<PingResult>True</PingResult>
<start>27/08/2014 14:11:41</start>
<end>27/08/2014 14:11:58</end>
<id>86</id>
<Total>00:00:17</Total>
<success>False</success>
</report>
我的计划是对每个XML使用,读取所有XML,然后创建一个新的XML
Dim directory As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(Me.FilePath + "\report\")
Dim xmlFiles As System.IO.FileInfo() = directory .GetFiles("*.xml")
For Each xmlFile As System.IO.FileInfo In xmlFiles
//To Do
Next
我想出了一个解决方案,我必须创建一个函数来合并输出文件,另一个函数来创建要合并的文件列表,还有我在这里找到的xsl,这要感谢joefawcett
Private Sub MergeReports(filename As String, stylesheet As String)
Dim doc As XmlDocument = New XmlDocument()
doc.Load(filename)
Dim root As XmlElement = doc.DocumentElement
Dim elemList As XmlNodeList = root.GetElementsByTagName("Item")
If elemList.Count.Equals(Me.TotalItems) Then
'Create the XslTransform and load the style sheet.
Dim settings As New XsltSettings(True, True)
Dim xslt As New XslCompiledTransform()
xslt.Load(stylesheet, settings, Nothing)
' Execute the transform and output the results to a file.
xslt.Transform(filename, "C:\NW\out\report\output.xml")
End If
End Sub
Private Sub CreateList()
Try
If (Not System.IO.File.Exists(Me.FilePath + "\report\list.xml")) Then
Dim writer As New XmlTextWriter(Me.FilePath + "\report\list.xml", Nothing)
writer.WriteStartDocument()
writer.WriteStartElement("Data")
writer.WriteAttributeString("Root", "Root")
writer.WriteStartElement("fileList")
writer.WriteElementString("Item", Me.HostName.ToString)
writer.WriteEndElement()
writer.Close()
Else
Dim xmlDoc As XmlDocument = New XmlDocument()
xmlDoc.Load(Me.FilePath + "\report\list.xml")
With xmlDoc.SelectSingleNode("//Data/fileList").CreateNavigator().AppendChild()
.WriteElementString("Item", Me.FilePath + "\report\" + Me.HostName.ToString)
.Close()
End With
xmlDoc.Save(Me.FilePath + "\report\list.xml")
End If
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
XSL
文件列表:
<Data Root="Root">
<List>
<Item>C:\NW\out\report\File1.xml</Item>
<Item>C:\NW\out\report\File2.xml</Item>
<Item>C:\NW\out\report\File3.xml</Item>
</List>
</Data>
C:\NW\out\report\File1.xml
C:\NW\out\report\File2.xml
C:\NW\out\report\File3.xml
能否列出一些您已经尝试过的代码?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:element name="{Data/@Root}">
<xsl:apply-templates select="Data/List/Item"/>
</xsl:element>
</xsl:template>
<xsl:template match="Item">
<xsl:copy-of select="document(.)"/>
</xsl:template>
<Data Root="Root">
<List>
<Item>C:\NW\out\report\File1.xml</Item>
<Item>C:\NW\out\report\File2.xml</Item>
<Item>C:\NW\out\report\File3.xml</Item>
</List>
</Data>