解析RESTful XML响应并在JTable中显示

问题描述 投票:1回答:3

我的Web服务正在运行,我可以使用下面的代码打印出服务检索到的XML:

resource = client.resource("http://localhost:8080/testProject/rest/items");
ClientResponse response= resource.get(ClientResponse.class);
String entity = response.getEntity(String.class);
System.out.println(entity);

但是我现在尝试使用这个XML作为JTable的数据提供者,我无法弄清楚如何解析它。我的代码在下面但不起作用,因为“entity”是一个字符串。

    JAXBContext context = JAXBContext.newInstance(Item.class);
    Unmarshaller um = context.createUnmarshaller();
    Item item = (Item) um.unmarshal(entity);

所以我的问题是

我在这做错了什么?

我不应该使用.getEntity(String.Class)来做这个吗?

是否有更简单的方法将此XML响应转换为JTable?

谢谢

java xml jaxb jersey jax-rs
3个回答
0
投票

首先,除非绝对必要,否则不要将xml转换为String数据(它适用于调试输出,但不适用于实际工作)。我没有亲自使用过球衣,但我想你可以以比String更好的形式获得xml(例如DOM文档)。

但是,如果你必须从字符串中获取xml,那么你可以像这样解组它:

um.unmarshal(new StringReader(entity));

1
投票

您可以使用以下方法从String创建Document

 public static Document loadXML(String xmlAsString) {
    DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    InputSource is = new InputSource(new StringReader(xmlAsString));
    return b.parse(is);
}

然后,您可以使用该文档并获取填充JTable所需的数据。


0
投票

以文档形式阅读回复

Document xml = wsResponse.asXml();
displayXml(xml);

之后使用下面的代码片段进行文本转换我使用了ref

void displayXml(Document doc) {
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer = null;
    try {
        transformer = tf.newTransformer();
    } catch (TransformerConfigurationException e1) {
        e1.printStackTrace();
    }
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    StringWriter writer = new StringWriter();
    try {
        transformer.transform(new DOMSource(doc), new StreamResult(writer));
    } catch (TransformerException e) {
        e.printStackTrace();
    }
    String output = writer.getBuffer().toString().replaceAll("\n|\r", "");
    System.out.println(output);
}
© www.soinside.com 2019 - 2024. All rights reserved.