私は JAXB と Java にかなり慣れていません。私は xjc を使用し、独自の名前空間マッパーを使用してカスタム ns1 ns2 などの名前空間をオーバーライドしています。Java は Matlab を介して実行されているため、通常の Java とまったく同じようにフォーマットされていません。ただし、変換できるはずなので、ストレートな Java の回答は問題ありません。
ここに私が欲しいものがあります:
<String> blah </String>
代わりに、マーシャリング後、次のようになります。
<String xmlns:ns4="http://www.w3.org/2001/XMLSchema" xsi:type="ns4:string">
blah
</String>
「xmlns:ns4」を削除する方法はありますか?要素から削除するものはありますか?
対応する (matlab) Java コードは次のとおりです。
a=javax.xml.namespace.QName('String');
c=JAXBElement(a, inner_class, 'blah');
c は、後で String 要素を含むリストに追加されます。
jxb = JAXBContext.newInstance('mypackage');
jaxbMarshaller = jxb.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.setProperty('com.sun.xml.internal.bind.namespacePrefixMapper', MyCustomMapper());
jaxbMarshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, 'http://thelocationofmyschema.com')
jaxbMarshaller.marshal(jaxbclassinstance, file);
私の XML は機能していますが、きちんとした/一貫性を保つために、比較的単純な xmlns ジャンクを削除したいと思います。
ありがとうございました!これは私の最初のスタックオーバーフローの質問です。標準に達していない場合は申し訳ありません。
アップデート
私はこれを解決しました。2 つのことが必要でした: 'blah' の代わりに、私は作成しました
blah=java.lang.String('blah')
matlab内の Java に対して忘れていること。次に、 JAXBElement を作成するときに、 inner_class 変数を使用する代わりに、blah.getClass()を使用すると、修飾なしで出力されます。これは、 QNameの質問というよりも、マッシュアップの質問であったことがわかりました。