6

XMLを生成するためにspring-mvcフレームワークでJAXBを使用しています。これはルート要素の例です:

<ns2:urlset xmlns:ns2="http://www.example.com">

ただし、これは私が望むものです(XML名前空間プレフィックスなしns2):

<urlset xmlns="http://www.example.com">

package-info.java以下を使用して、デフォルトのプレフィックスを削除しようとしましたns2

@javax.xml.bind.annotation.XmlSchema(  
    namespace = "http://www.example.com",   
    xmlns = {@javax.xml.bind.annotation.XmlNs(namespaceURI = "http://www.example.com", prefix="")},  
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED)  
package com.example.code

ns2別の文字列に設定すると、プレフィックスを(より)他の値に変更できprefixます。prefixただし、値を「」に設定してもプレフィックスを削除することはできません。それでもデフォルトのものが表示されますns2。デフォルトのプレフィックスを削除する方法はありますns2か?

もう1つの質問はstandalone、XMLのヘッダーの属性も削除できるかどうかです。もしそうなら、それはを通して行うことができpackage-info.javaますか?

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

3 に答える 3

2

これを試して:

パッケージ情報.java

    @XmlSchema(
    namespace="http://www.sitemaps.org/schemas/sitemap/0.9", 
    elementFormDefault=XmlNsForm.QUALIFIED)
package com.example.model;
import javax.xml.bind.annotation.XmlSchema;
import javax.xml.bind.annotation.XmlNsForm;

XmlUrlSet.java

@XmlAccessorType(value = XmlAccessType.NONE)
@XmlRootElement(name = "urlset", namespace = "http://www.sitemaps.org/schemas/sitemap/0.9")
public class XmlUrlSet {...}
于 2012-11-20T22:38:08.520 に答える
1

@alex の回答がうまくいかなかった場合は、JAXB のリファレンス実装でバグ (少なくとも、それは 1 つだと思います) を見つけた可能性があります。モデルクラスに JaxbElement を追加すると、JAXB RI がデフォルトの名前空間を無視し始めました。Eclipse MOXy に切り替える以外の解決策を見つけることができず (他の変更を加えずに)、うまくいきました。(注意: moxyの別のバグに注意してください)

2 番目の質問についても、これを使用します。

JAXBContext jc = JAXBContext.newInstance(...);
Marshaller m = jc.createMarshaler();
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
于 2012-12-04T15:47:12.910 に答える