0

私のxmlドキュメントは次のようになります..(実際にはGoogleマップのkmlファイルです..)

 <kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <Folder>
      <Name>Folder1</Name>
      <Placemark>
        <Name>Placemark1Folder1</Name>
        <LookAt>
          <longitude>-122.0839597145766</longitude>
          <latitude>37.42222904525232</latitude>
        </LookAt>
      </Placemark>
      <Placemark>
        <Name>Placemark2Folder1</Name>
        <LookAt>
          <longitude>-101.083959</longitude>
          <latitude>26.422</latitude>
        </LookAt>
      </Placemark>
    </Folder>
    <Folder>
      <Name>Folder2</Name>
      <Placemark>
        <Name>Placemark1Folder2</Name>
        <LookAt>
          <longitude>-96.566556</longitude>
          <latitude>14.422</latitude>
        </LookAt>
      </Placemark>
    </Folder>
  </Document>
</kml>

各フォルダノードの各目印に従って、次のような個別のxmlファイルを作成したいと思います

最初の XML:

<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <Folder>
      <Name>Folder1</Name>
      <Placemark>
        <Name>Placemark1Folder1</Name>
        <LookAt>
          <longitude>-122.0839597145766</longitude>
          <latitude>37.42222904525232</latitude>
        </LookAt>
      </Placemark>
    </Folder>
  </Document>
</kml>

2番目のxml

<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <Folder>
      <Name>Folder1</Name>
      <Placemark>
        <Name>Placemark2Folder1</Name>
        <LookAt>
          <longitude>-101.083959</longitude>
          <latitude>26.422</latitude>
        </LookAt>
      </Placemark>
    </Folder>
  </Document>
</kml>

3番目のxml

<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <Folder>
      <Name>Folder2</Name>
      <Placemark>
        <Name>Placemark1Folder2</Name>
        <LookAt>
          <longitude>-96.566556</longitude>
          <latitude>14.422</latitude>
        </LookAt>
      </Placemark>
    </Folder>
  </Document>
</kml>

..私はxmlの初心者です..助けてください

4

2 に答える 2

0

最後に、ノードに従ってxmlを分割することに成功しました..xmlのノードに従って個々のkmlファイルを保存しました..これが私の解決策です

Public Sub SplitXml(ByVal XmlDoc As XmlDocument, ByVal SaveLocation As String)

        Dim TmpXml As XmlDocument = XmlDoc
        Dim Str As String = "<?xml version=""1.0"" encoding=""UTF-8""?>" & "<kml xmlns=" & Chr(34) & "http://www.opengis.net/kml/2.2" & Chr(34) & ">" & "<Document>"
        Dim DocumentNodes As XmlNodeList = TmpXml.GetElementsByTagName("Document")
        '=======================
        'Building Common String 
        '=======================
        For Each node As XmlNode In DocumentNodes
            Dim DocumentChildNodes As XmlNodeList = node.ChildNodes
            For Each Childnode As XmlNode In DocumentChildNodes
                If Childnode.Name <> "Folder" Then
                    Str = Str & Childnode.OuterXml.Replace("xmlns=""http://www.opengis.net/kml/2.2""", "")
                Else
                    Exit For
                End If
            Next
        Next

        Dim FolderNodes As XmlNodeList = TmpXml.GetElementsByTagName("Folder")
        Dim FolderName As String = String.Empty
        Dim XmlDocSave As XmlDocument = New XmlDocument()
        Dim StrXml As String = String.Empty
        Dim TmpStr As String = String.Empty
        Dim FileName As String = String.Empty
        For Each node As XmlNode In FolderNodes
            '==============================================================
            'Creating Directories For kml Getting Name from FirstChild Node
            '===============================================================
            FolderName = DirectCast(DirectCast(node, System.Xml.XmlElement).FirstChild, System.Xml.XmlElement).InnerText
            FolderName = FolderName.Replace(".", "_")
            FolderName = FolderName.Replace(" ", "")
            If (Not System.IO.Directory.Exists(SaveLocation & "\" & FolderName)) Then
                System.IO.Directory.CreateDirectory(SaveLocation & "\" & FolderName)
            End If
            '==============================================================
            'Creating kml Files Getting Name from FirstChild Node
            '===============================================================
            Dim FolderChildNodes As XmlNodeList = node.ChildNodes
            For Each childnode As XmlNode In FolderChildNodes
                If childnode.Name = "Placemark" Then
                    FileName = DirectCast(DirectCast(childnode, System.Xml.XmlElement).FirstChild, System.Xml.XmlElement).InnerText
                    FileName = FileName.Replace(".", "_")
                    FileName = FileName.Replace(" ", "")
                    StrXml = Str & "<Folder>" & TmpStr & childnode.OuterXml & "</Folder>" & "</Document>" & "</kml>"

                    XmlDocSave.LoadXml(StrXml)
                    XmlDocSave.Save(SaveLocation & "\" & FolderName & "\" & FileName & ".kml")
                    XmlDocSave = New XmlDocument()
                    StrXml = String.Empty
                Else
                    TmpStr = TmpStr & childnode.OuterXml
                End If
            Next
            TmpStr = String.Empty
        Next
    End Sub
于 2013-05-21T10:38:51.343 に答える