来自 XML 的 Jaxb 字符串
Jaxb String from XML
使用 Jaxb 解组器,我无法将 XML 内容作为字符串加载。
这是我正在努力实现的 运行 示例。
public static class BarAdapter extends XmlAdapter<Object, String> {
@Override
public Object marshal(String v) throws Exception {
return null;
}
@Override
public String unmarshal(Object v) throws Exception {
return null; // what to do with the ElementNsImpl??
}
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class Container implements Serializable {
@XmlAnyElement
@XmlJavaTypeAdapter(BarAdapter.class)
private String bar;
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
}
public static void main(String[] args) throws Exception {
JAXBContext jaxbContext = JAXBContext.newInstance(Container.class);
String xml = "<foo><bar><name>Barry</name><surName>White</surName></bar></foo>";
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
InputStream is = new ByteArrayInputStream(xml.getBytes());
JAXBElement<Container> barWrapperElement = unmarshaller.unmarshal(new StreamSource(is), Container.class);
Container container = barWrapperElement.getValue();
System.out.println(container.getBar());
}
我想进酒吧:<bar><name>Barry</name><surName>White</surName></bar>
我尝试使用 @XmlAnyElement
,但它给出了 ElementNsImpl
,我需要 String
。
如果您有更好的解决方案,请post。我感觉我做的不对。
我可以把ElementNsImpl
变成String
。
所以:
@Override
public String unmarshal(Object obj) throws Exception {
// Be careful, affect a new string writer has to be done within your
// unmarshaller. If you do this here, it will partially unmarshall.
// I can povide more code upon request
StringWriter stringWriter = new StringWriter();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
Document document = ((Element) obj).getOwnerDocument();
transformer .transform(new DOMSource(document), new StreamResult(stringWriter));
return stringWriter.toString();
}
使用 Jaxb 解组器,我无法将 XML 内容作为字符串加载。
这是我正在努力实现的 运行 示例。
public static class BarAdapter extends XmlAdapter<Object, String> {
@Override
public Object marshal(String v) throws Exception {
return null;
}
@Override
public String unmarshal(Object v) throws Exception {
return null; // what to do with the ElementNsImpl??
}
}
@XmlAccessorType(XmlAccessType.FIELD)
public static class Container implements Serializable {
@XmlAnyElement
@XmlJavaTypeAdapter(BarAdapter.class)
private String bar;
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
}
public static void main(String[] args) throws Exception {
JAXBContext jaxbContext = JAXBContext.newInstance(Container.class);
String xml = "<foo><bar><name>Barry</name><surName>White</surName></bar></foo>";
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
InputStream is = new ByteArrayInputStream(xml.getBytes());
JAXBElement<Container> barWrapperElement = unmarshaller.unmarshal(new StreamSource(is), Container.class);
Container container = barWrapperElement.getValue();
System.out.println(container.getBar());
}
我想进酒吧:<bar><name>Barry</name><surName>White</surName></bar>
我尝试使用 @XmlAnyElement
,但它给出了 ElementNsImpl
,我需要 String
。
如果您有更好的解决方案,请post。我感觉我做的不对。
我可以把ElementNsImpl
变成String
。
所以:
@Override
public String unmarshal(Object obj) throws Exception {
// Be careful, affect a new string writer has to be done within your
// unmarshaller. If you do this here, it will partially unmarshall.
// I can povide more code upon request
StringWriter stringWriter = new StringWriter();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
Document document = ((Element) obj).getOwnerDocument();
transformer .transform(new DOMSource(document), new StreamResult(stringWriter));
return stringWriter.toString();
}