首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java API for KML (JAK) -删除kml中的额外ns2注释

Java API for KML (JAK) -删除kml中的额外ns2注释
EN

Stack Overflow用户
提问于 2015-07-11 22:43:33
回答 2查看 1.2K关注 0票数 3

有没有办法去掉KML文件中多余的命名空间前缀(如ns2)?

这是我从我的代码中收到的kml的一个示例:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:kml xmlns="http://www.google.com/kml/ext/2.2"     xmlns:ns2="http://www.opengis.net/kml/2.2" xmlns:ns3="http://www.w3.org/2005/Atom" xmlns:ns4="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
    <ns2:Placemark>
        <ns2:name>London, UK</ns2:name>
        <ns2:open>1</ns2:open>
        <ns2:Point>
            <ns2:coordinates>-0.126236,51.500152</ns2:coordinates>
        </ns2:Point>
    </ns2:Placemark>
</ns2:kml>

我想要的是这样的:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xal="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" xmlns:gx="http://www.google.com/kml/ext/2.2">
    <Placemark>
        <name>London, UK</name>
        <open>true</open>
        <Point>
            <altitudeMode>clampToGround</altitudeMode>
            <coordinates>-0.126236,51.500152</coordinates>
        </Point>
    </Placemark>
</kml>

这是我的java代码:

代码语言:javascript
复制
final Kml kml = new Kml();    
kml.createAndSetPlacemark()
.withName("London, UK").withOpen(Boolean.TRUE)
.createAndSetPoint().addToCoordinates(-0.126236, 51.500152);
//marshals to console
kml.marshal();
//marshals into file
kml.marshal(new File("output.kml"));

任何帮助都是非常感谢的!谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-07-22 03:27:14

这将完全避免kml元素上的前缀:

代码语言:javascript
复制
Marshaller marshaller = JAXBContext.newInstance(new Class[]{Kml.class}).createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new NamespacePrefixMapper()
{
    @Override
    public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix)
    {
        return namespaceUri.matches("http://www.w3.org/\\d{4}/Atom") ? "atom"
                : (
                namespaceUri.matches("urn:oasis:names:tc:ciq:xsdschema:xAL:.*?") ? "xal"
                        : (
                        namespaceUri.matches("http://www.google.com/kml/ext/.*?") ? "gx"
                                : (
                                namespaceUri.matches("http://www.opengis.net/kml/.*?") ? ""
                                        : (
                                        null
                                        )
                                )
                        )
                );
    }
});
marshaller.marshal(kml, file);
票数 3
EN

Stack Overflow用户

发布于 2015-12-04 10:20:58

你能试试这段代码吗?

代码语言:javascript
复制
Marshaller m =  JAXBContext.newInstance(new Class[] { Kml.class }).createMarshaller();
m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, true );
m.setProperty( Marshaller.JAXB_FRAGMENT, false );
m.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8");
final Kml kml = new Kml();    
kml.createAndSetPlacemark()
.withName("London, UK").withOpen(Boolean.TRUE)
.createAndSetPoint().addToCoordinates(-0.126236, 51.500152);
StringWriter sw = new StringWriter();
m.marshal(kml,sw);
String s1 = sw.toString();
System.out.println(s1);

它为我生产

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<kml:kml xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:xal="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
    <kml:Placemark>
        <kml:name>London, UK</kml:name>
        <kml:open>1</kml:open>
        <kml:Point>
            <kml:coordinates>-0.126236,51.500152</kml:coordinates>
        </kml:Point>
    </kml:Placemark>
</kml:kml>

如果没有,我将寻找我可能对jak代码所做的其他更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31358331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档