2016-09-29 150 views
0

我想在解组时删除命名空间前缀,我可以通过设置marshaller属性来使用PrefixMapper更改命名空间。默认命名空间是ns2,我不想要任何前缀,但它不允许我给空白前缀值。如果我给出如下所示的空字符串,它将采用默认值。 1)jaxbMarshaller.setProperty(“com.sun.xml.internal.bind.namespacePrefixMapper”,new MyNamespaceMapper()); 1)jaxbMarshaller.setProperty(“com.sun.xml.internal.bind.namespacePrefixMapper”,new MyNamespaceMapper()); .....JAXB Marshallingremove命名空间前缀

class MyNamespaceMapper extends NamespacePrefixMapper { 
    private static final String URI = "http://www.examples/webservice/"; 

    @Override 
    public String getPreferredPrefix(String namespaceUri, String suggestion, 
     boolean requirePrefix) { 
     if(URI.equals(namespaceUri)) { 
      return ""; 
     } 
     return suggestion; 
    } 
} 

2)如果我编辑包信息如下那么它是好的,但问题是,我创建一个JAXB整数元素如下,前缀移除不应用这些元素

JAXBElement<Integer> jaxBInteger = new JAXBElement<Integer>(
          new QName("http://www.example.com/", "age",""),30); 
        pax.setAge(jaxBInteger); 

<Login Password="" Email=""/> 
     <Paxes> 
      <Pax IdPax="1"> 
       <ns2:Age>30</ns2:Age> 
      </Pax> 
      <Pax IdPax="2"> 
       <ns2:Age>30</ns2:Age> 
      </Pax> 
     </Paxes> 
    </Login> 

回答

0

是替换前缀“空”似乎很棘手,因为你可以在这里看到我question。在下面的XML生成后,我找到了使用xslt进行转换的解决方案。希望能帮助到你。

removenamespace.xslt

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:preserve-space elements="*"/> 

    <xsl:template match="@*|node()[not(self::*)]"> 
     <xsl:copy /> 
    </xsl:template> 

    <xsl:template match="*"> 
     <xsl:element name="{local-name()}"> 
      <xsl:apply-templates select="node()|@*" /> 
     </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

XSLT转换

File outputXML = new File(inputXML.getParentFile(), inputXML.getName() + "-ns.xml"); 

    try{ 
    TransformerFactory factory = TransformerFactory.newInstance(); 
    Source xslt = new StreamSource(new File(REMOVE_NAMESPACE_XSL)); 
    Transformer transformer = factory.newTransformer(xslt); 

    Source text = new StreamSource(inputXML); 
    transformer.transform(text, new StreamResult(outputXML)); 

    } 
    catch(Exception e){ 
     // something gone wrong. return original XML. 
     return inputXML; 
    }