83

結果の XML でstandalone="yes"が生成されないようにする JAXB 設定を知っていますか?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
4

13 に答える 13

121

JDK1.6 の一部である JAXB で

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
于 2010-11-01T08:27:51.080 に答える
66

このプロパティ:

marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false);

...次のものを持たないように使用できます:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

ただし、このベストプラクティスは考慮しません。

于 2008-12-09T08:26:54.267 に答える
64

どちらかを使用できます

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

また

marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false)

デフォルトの XML 宣言を無効にしてから、カスタム XML 宣言を追加するには、

<?xml version="1.0" encoding="UTF-8"?>

marshaller.setProperty("com.sun.xml.bind.xmlHeaders",
      "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");

生成された xml に追加して、standalone="yes"プロパティを回避します。

于 2011-03-25T11:00:29.150 に答える
7

他の誰かがまだこの問題に苦しんでいる場合は、使用を検討してください。

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

すべての XML 宣言を削除しString、出力ストリーム / メソッドの先頭に独自のものを記述するだけです。

于 2016-11-07T12:13:36.077 に答える
5

ドキュメントを依存するようにするとDOCTYPE(名前付きエンティティを使用するなど)、スタンドアロンでstandalone="yes"はなくなるため、XML 宣言では許可されません。

ただし、スタンドアロン XML はどこでも使用できますが、非スタンドアロンは外部をロードしない XML パーサーにとって問題があります。

XML をサポートしていないソフトウェアとの相互運用性以外に、この宣言がどのように問題になるかはわかりませんが、いくつかの恐ろしい正規表現スープです。

于 2008-12-24T10:51:09.693 に答える
3
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");

これはJDK1.7でうまくいきました。standalone=\"no\" を削除して、残りの xml 部分のみを取得できます

于 2016-08-10T11:40:45.647 に答える
1

私には、コメントする「特権」を持つほどの「評判」がありません。;-)

@Debasis、指定したプロパティに注意してください。

"com.sun.xml.internal.bind.xmlHeaders"

次のようにする必要があります。

"com.sun.xml.bind.xmlHeaders" (without the "internal", which are not meant to be used by the public)

あなたがしたように「内部」プロパティを使用すると、javax.xml.bind.PropertyExceptionが発生します

于 2016-09-21T23:34:00.387 に答える