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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析RESTful XML响应并在JTable中显示相关的知识,希望对你有一定的参考价值。

我的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?

谢谢

答案

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

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

um.unmarshal(new StringReader(entity));
另一答案

您可以使用以下方法从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所需的数据。

另一答案

以文档形式阅读回复

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("
|
", "");
    System.out.println(output);
}

以上是关于解析RESTful XML响应并在JTable中显示的主要内容,如果未能解决你的问题,请参考以下文章

RESTful 响应如何在 Yii2 中返回 JSON 而不是 XML?

RESTful 响应如何在 Yii2 中返回 JSON 而不是 XML?

从 WCF RESTful 响应中删除 xml 命名空间

解析来自 Restful Web 服务的响应的 C# 代码

从 wcf RESTful 响应中的 xml 中删除 xmlns 属性

使用JNDI明显慢于persistence.xml中的显式连接(Jetty 9 / Hibernate)