1

私はこのxmlを持っています:

<tag1 xmlns="myNamespace.com/#">
    <insideTag myAttribute="5">
        some text
    </insideTag>
</tag1>

しかし、マーシャリング後は次のようになります。

<tag1 xmlns="myNamespace.com">
    <insideTag xmlns:ns1="myNamespace.com/#" xmlns="" myAttribute="5">
        some text
    </insideTag>
</tag1>

ほとんど同じですが、xmlが最初のもののようであることが本当に必要です。

このxmlへのxsdはありません。実際には、その xml が解析されて org.w3c.dom.Element になり、ObjectType (以下の xsd およびクラスの簡略化された実装) に追加され、この ObjectType がマーシャリングされます。
これが重要な場合は、NamespacePrefixMapper を使用しています。xsd (attributeFormDefault が設定されていないことに注意してください)

<schema xmlns="http://www.w3.org/2001/XMLSchema" version="0.1"
  xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
  targetNamespace="http://www.w3.org/2000/09/xmldsig#"
  elementFormDefault="qualified">

    <complexType name="ObjectType" mixed="true">
        <sequence minOccurs="0" maxOccurs="unbounded">
            <any namespace="##any" processContents="lax"/>
        </sequence>
    </complexType>
</schema>

クラス:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ObjectType", namespace = "http://www.w3.org/2000/09/xmldsig#",
   propOrder = { "content" })
public class ObjectType{
    @XmlMixed
    @XmlAnyElement(lax = true)
    protected List<Object> content;

    public List<Object> getContent() {
        if (content == null) {
            content = new ArrayList<Object>();
        }
        return this.content;
    }
}

それで...誰かがこれを解決する方法を知っていますか?
ちなみに...このソリューションはjaxb-impl-2.1.4でも動作する必要があります。

みんな助けてくれてありがとう。

4

1 に答える 1

0

不要な名前空間を避けるために、次ObjectFactoryのようにクラスに登録する必要があります。

@XmlElementDecl(name="CurrencyPayTypeCode") 
public JAXBElement<OLILUMEASUNITS> createCurrencyPayTypeCode(OLILUMEASUNITS elem) {
                return new JAXBElement<OLILUMEASUNITS>(new QName("OLILUMEASUNITS"), OLILUMEASUNITS.class, elem); 
}

どこ:

  1. CurrencyPayTypeCode- insideTag の名前
  2. OLILUMEASUNITS- このタグをアンマーシャリングできるクラス
于 2014-11-06T07:42:54.890 に答える