Строка родительский узел XML анализировать с Java - PullRequest
0 голосов
/ 18 июня 2019

Как проанализировать xml с именем родительского узла как строку в jaxb. Я пытаюсь разобрать мою строку XML путем привязки к классу модели с помощью JAXB. Моя строка XML выглядит примерно так:

String inputXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
            + "<string xmlns=\"http://tempuri.org/\">\n"
            + " <Response Code=\"1212\">\n"
            + "     <Message>Operation is succesfully completed</Message>\n"
            + " </Response>\n"
            + "</string>";

Мой вопрос заключается в том, как создать класс модели для сопоставления этого XML-файла с ним? Если я удалю родительский узел строки, например:

String inputXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
            + " <Response Code=\"1212\">\n"
            + "     <Message>Operation is succesfully completed</Message>\n"
            + " </Response>\n";

Я могу создать класс модели как:

@XmlRootElement(name = "Response")
public class Response {

String Code;
String Message;
public String getCode() {
    return Code;
}

@XmlAttribute(name = "Code")
public void setCode(String Code) {
    this.Code= Code;
}

public String getMessage() {
    return Message;
}

@XmlElement(name = "Message")
public void setMessage(String Message) {
    this.Message = Message;
}    

@Override
public String toString() {
    return Message;
}
}

И в моем классе Java я могу анализировать, используя JAXB как:

    InputSource inputSource = new InputSource(new StringReader(inputXml));

    // map xml to model class in jaxb
    JAXBContext jaxbContext = JAXBContext.newInstance(Response.class);
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    Response response = (Response) jaxbUnmarshaller.unmarshal(inputSource);

Но я должен разобрать xml с

http://tempuri.org/\">...

как родительский узел. Я даже пытался следовать этому ответу: Как разобрать / разобрать строку xml внутри строки xml в объект Java?

но не работает. Я что-то упустил?

1 Ответ

0 голосов
/ 18 июня 2019

Вам нужно обернуть содержимое в StringReader,

StringReader reader = new StringReader(inputXml);
JAXBContext jaxbContext = JAXBContext.newInstance(Response.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Response response = (Response) jaxbUnmarshaller.unmarshal(reader);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...