从HTTP XML响应中提取元素 - HTTP Client& Java的

时间:2013-07-03 20:21:04

标签: java dom xml-parsing xmlhttprequest httpclient

所以我已经从这里得到了帮助所以我想为什么不再尝试一下呢?任何建议都将不胜感激。

我正在使用HTTP客户端并发出POST请求;响应是一个XML主体,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<CartLink 
    xmlns="http://api.gsicommerce.com/schema/ews/1.0">
    <Name>vSisFfYlAPwAAAE_CPBZ3qYh</Name>
    <Uri>carts/vSisFfYlAPwAAAE_CPBZ3qYh</Uri>
</CartLink>

现在......

我有一个

的HttpEntity
[HttpResponse].getEntity(). 

然后我通过说

得到响应的String表示(在这种情况下是XML)
String content = EntityUtils.toString(HttpEntity)

我尝试了关于这篇文章的一些建议:How to create a XML object from String in Java?但它似乎对我不起作用。当我构建文档时,它似乎仍然是空的。

我的结束目标只是获取NAME字段,即“vSisFfYlAPwAAAE_CPBZ3qYh”部分。那么我想建立一个文档,然后提取它......?或者有更简单的方法吗?我一直在尝试不同的事情,似乎无法让它发挥作用。

感谢所有帮助人员,非常感谢!!

1 个答案:

答案 0 :(得分:1)

尝试使用Java的内置功能来解析XML,而不是尝试使用字符串操作来提取值。这是一个更好的方法。 Http Components以XML格式返回响应 - 这是有原因的。 :)

这可能是解决问题的一种方法:

    // Parse the response using DocumentBuilder so you can get at elements easily
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    Document doc = docBuilder.parse(response);
    Element root = doc.getDocumentElement();
    // Now let's say you have not one, but 'n' nodes that contain the value
    // you're looking for. Use NodeList to get a list of all those nodes and just 
    // pull out the tag/attribute's value you want.
    NodeList nameNodesList = doc.getElementsByTagName("Name");
    ArrayList<String> nameValues = null;
    // Now iterate through the Nodelist to get the values you want.
    for (int i=0; i<nameNodesList.getLength(); i++){
         nameValues.add(nameNodesList.item(i).getTextContent());
    }

ArrayList“nameValues”现在将包含“Name”标记中包含的每个值。您还可以创建一个HashMap来存储键值对节点及其各自的文本内容。

希望这会有所帮助。