5

たとえば、属性の名前空間を持つ XML を非整列化する必要があります。

<license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/2.0/uk/"><license-p>

この属性は次のように定義されます。

@XmlAttribute(namespace = "http://www.w3.org/TR/xlink/")  
@XmlSchemaType(name = "anySimpleType")  
protected String href;  

しかし、href を取得しようとすると、null になります。正しい値を取得するには、jaxb コードに何を追加/変更する必要がありますか? 名前空間を回避しようとしましたが、うまくいきませんでした。私も試してみまし@XmlAttribute(namespace = "http://www.w3.org/TR/xlink/", name = "href")たが、どちらもうまくいきませんでした。

XML ファイルの先頭は次のとおりです。

<DOCTYPE article
  PUBLIC "-//NLM//DTD v3.0 20080202//EN" "archive.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" article-type="article">
4

1 に答える 1

3

以下は、アノテーションでnamespaceプロパティを指定する方法の例です。@XmlAttribute

入力.xml

<article xmlns:xlink="http://www.w3.org/1999/xlink">
    <license xlink:href="http://creativecommons.org/licenses/by/2.0/uk/"/>
</article>

ライセンス

package forum10566766;

import javax.xml.bind.annotation.XmlAttribute;

public class License {

    private String href;

    @XmlAttribute(namespace="http://www.w3.org/1999/xlink")
    public String getHref() {
        return href;
    }

    public void setHref(String href) {
        this.href = href;
    }

}

論文

package forum10566766;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Article {

    private License license;

    public License getLicense() {
        return license;
    }

    public void setLicense(License license) {
        this.license = license;
    }

}

デモ

package forum10566766;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Article.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum10566766/input.xml");
        Article article = (Article) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(article, System.out);
    }

}

出力

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<article xmlns:ns1="http://www.w3.org/1999/xlink">
    <license ns1:href="http://creativecommons.org/licenses/by/2.0/uk/"/>
</article>

名前空間のプレフィックスを制御したいですか?

ドキュメントが XML にマーシャリングされるときに使用される名前空間プレフィックスを制御する場合は、次の記事を参照してください。

于 2012-05-13T19:10:01.360 に答える