12

JAXB を使用して XML メッセージを作成します。作成する必要がある XML は次のとおりです (簡単にするため)。

<request>
  <header/>
</request>

私のコードは次のようになります。

import javax.xml.bind.annotation.*;

@XmlRootElement(name = "request")
public class Request {

    private String header;

    @XmlElement(required=true)
    public String getHeader() {
      return header;
    }

    public void setHeader(String header) {
      this.header=header;
    }
}

問題:header要素が表示されません (ヘッダーは ですnull)。ヘッダーが空の文字列に設定されている場合、次のように表示されます。

<request>
  <header></header>
</request>

Objectの代わりにas type を使用するとString、結果はさらに悪化します。

<request>
  <header xsi:type="xs:string" 
   xmlns:xs="http://www.w3.org/2001/XMLSchema" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></header>
</request>

ところで:このコードを使用して XML 文字列を作成しています。

空のタグを取得することは可能ですか?

4

4 に答える 4

12

XMLでは<header/><header></header>同じことです。前者が本当に必要な場合は、プリティファイアを使用してください。javax.xml.transform.TransformerFactory.newTransformer()おそらくあなたのためにそれをするでしょう。

于 2009-02-27T13:20:43.960 に答える
4

Stringオブジェクトの空のタグは、基本的に空の文字列です。

次のように呼び出すと、探しているものが得られます。

request.setHeader("")

また、XMLでは、ヘッダーの次の2つの宣言は同一であることに注意してください。これらの両方に子テキストノードはありません。これらは基本的に同じであり、すべてのXMLパーサーによって同じように扱われます。

<header></header>

<header/>
于 2009-02-27T15:25:53.360 に答える
2

@Tom Hawtinとして-タックラインは言った

<header/><header></header>同じです。パーサーは「」を提供します。

nillableヘッダー注釈を付ける必要があります

@XmlElement(nillable=true, required=true)
public String getHeader() {
  return header;
}

このコードが値として次の XML を生成することを願っていnullます。

import javax.xml.bind.*;
import javax.xml.bind.annotation.*;

@XmlRootElement
public class Request {

    public static void main(String[] args) throws JAXBException {
        final Request request = new Request();
        final JAXBContext context = JAXBContext.newInstance(Request.class);
        final Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
                               Boolean.TRUE);
        marshaller.marshal(request, System.out);
        System.out.flush();
    }

    @XmlElement(nillable=true, required=true)
    private String header;
}

版画

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<request>
    <header xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</request>
于 2012-06-27T16:38:34.027 に答える
0

XMLのシリアル化プロセス中では<header/>なく、効果的に同じことを望んでいました。<header></header>

空の文字列ではなく null 値が正しい結果を生成するため、値を明示的に null に設定するようにセッター メソッドを変更しました。

public void setHeader(String header) {
    this.header = "".equals(header) ? null : header;
}
于 2015-07-09T00:28:16.883 に答える