2016-09-29 10 views
0

アンマーシャリング中に名前空間接頭辞を削除しようとしていますが、marshallerプロパティを設定してPrefixMapperを使用して名前空間を変更できました。デフォルトネームスペースはns2ですが、プレフィックスは必要ありませんが、空のプレフィックス値を与えることはできません。下のように空文字列を指定すると、デフォルト値になります。JAXB Marshallingremove名前空間プレフィックス

1)jaxbMarshaller.setProperty( "com.sun.xml.internal.bind.namespacePrefixMapper"、new MyNamespaceMapper()); .....

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)場合は、以下のように、私は編集パッケージ情報は結構ですが、問題は、プレフィックス除去は、これらの要素に適用されていない、私は以下のように1 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; 
    } 
関連する問題