2

私は 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の質問というよりも、マッシュアップの質問であったことがわかりました。

4

1 に答える 1

0

要求に応じて、私のソリューションを回答として投稿します。

アップデート

私はこれを解決しました。2 つのことが必要でした。「何とか」の代わりに、私は

blah=java.lang.String('blah') matlab 内で Java に対して行うのを忘れています。「何とか」と入力すると、matlab文字列をJava文字列に変換する際に何か問題が発生したと思います。

次に、JAXBElement を作成するときに、inner_class 変数を使用する代わりに、

classlist = class.getClass.getClasses();
inner_class = classlist(1);

私はblah.getClass()を使用します(blahは文字列の変数です)。

これは修飾なしで出力されます。これは、QName の質問というよりも、マッシュアップの質問であったことがわかりました。

なぜこれらのいずれかが必要なのかを尋ねてください。答えはありません:)

于 2013-07-05T20:37:57.590 に答える