add some declaration line to the xml file with the aid of MarkupBuilder

890 Views Asked by At

I am trying to build a xml file with the MarkupBuilder with some declarations and tags but I do not find a solution to build the following line

<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">

in the xml file.

I appreciate any help

code

def writer = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(writer)
xml.mkp.xmlDeclaration(version: "1.0", encoding: "utf-8")
xml.Documents {
    Placemark() {
        name("mapData")
        styleUrl("#m_ylw-pushpin")
        LineString(){
         tessellate("1") 
         coordinates("8.463415562903656,47.97716901704985,0 8.462984259089152,47.97656710950728,0 8.461242137735676,47.97352418265724,0 8.485274199626216")
          }

    }
}

println writer.toString()

example

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
    </StyleMap>
    <Placemark>
        <name>mapData</name>
        <styleUrl>#m_ylw-pushpin</styleUrl>
        <LineString>
            <tessellate>1</tessellate>
            <coordinates>
                8.463415562903656,47.97716901704985,0 8.462984259089152,47.97656710950728,0 8.461242137735676,47.97352418265724,0 8.485274199626216
           </coordinates>
        </LineString>
    </Placemark>
</Document>
</kml>

Current output

<?xml version='1.0' encoding='utf-8'?>
<Documents>
  <Placemark>
    <name>mapData</name>
    <styleUrl>#m_ylw-pushpin</styleUrl>
    <LineString>
      <tessellate>1</tessellate>
      <coordinates>8.463415562903656,47.97716901704985,0 8.462984259089152,47.97656710950728,0 8.461242137735676,47.97352418265724,0 8.485274199626216</coordinates>
    </LineString>
  </Placemark>
</Documents>
1

There are 1 best solutions below

0
Gergely Toth On BEST ANSWER

Add kml as top level element, add Document as child to it and invoke setDoubleQuotes(true) on the builder to output double quotes instead of single

def writer = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(writer)
xml.doubleQuotes = true 
xml.mkp.xmlDeclaration version: "1.0", encoding: "utf-8"
xml.kml ( xmlns:"http://www.opengis.net/kml/2.2",
    "xmlns:gx": "http://www.google.com/kml/ext/2.2",
    "xmlns:kml": "http://www.opengis.net/kml/2.2",
    "xmlns:atom": "http://www.w3.org/2005/Atom"
) {
    Documents {
        Placemark() {
            name "mapData"
            styleUrl "#m_ylw-pushpin"
            LineString {
                tessellate "1" 
                coordinates "8.463415562903656,47.97716901704985,0 8.462984259089152,47.97656710950728,0 8.461242137735676,47.97352418265724,0 8.485274199626216"
            }
        }
    }
}

println writer.toString()

Output:

<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
  <Documents>
    <Placemark>
      <name>mapData</name>
      <styleUrl>#m_ylw-pushpin</styleUrl>
      <LineString>
        <tessellate>1</tessellate>
        <coordinates>8.463415562903656,47.97716901704985,0 8.462984259089152,47.97656710950728,0 8.461242137735676,47.97352418265724,0 8.485274199626216</coordinates>
      </LineString>
    </Placemark>
  </Documents>
</kml>