解析特定的XML

时间:2017-07-24 11:05:57

标签: java json xml

我想用Java解析XML。 XML看起来像:

<Attributes><ProductAttribute ID="359"><ProductAttributeValue><Value>1150</Value></ProductAttributeValue></ProductAttribute><ProductAttribute ID="361"><ProductAttributeValue><Value>1155</Value></ProductAttributeValue></ProductAttribute></Attributes>

我的尝试是:

 public static void parseXml(String sb) throws Exception{


    sb = "<Attributes><ProductAttribute ID="359"><ProductAttributeValue><Value>1150</Value></ProductAttributeValue></ProductAttribute><ProductAttribute ID="361"><ProductAttributeValue><Value>1155</Value></ProductAttributeValue></ProductAttribute></Attributes>";

     Document dom;
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();

    dom = db.parse(new InputSource(new ByteArrayInputStream(sb.getBytes("utf-8"))));

    dom.toString();
}

我想先看看,如果解析正在进行中。但事实并非如此。

我收到错误:

 Premature end of file

有任何人有想法,我该如何解析这些?

问题不重复。我已经阅读了另一个问题的答案,比如我的问题,但区别在于XML。

由于

1 个答案:

答案 0 :(得分:0)

首先解析JSON字符串以获取XML,然后解析xml。例如,使用JSON-java

        JSONObject obj = new JSONObject(json);
        JSONArray arr = obj.getJSONArray("value");
        for (Object elm: arr) {
            String xml = ((JSONObject)elm).getString("AttributesXml");
            DocumentBuilderFactory documentBuilderFactory
                    = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder
                    = documentBuilderFactory.newDocumentBuilder();
            Document document = documentBuilder.parse(
                    new InputSource(new StringReader(xml)));
            doSomethingWith(document);
        }

但是使用String参数解析的方法需要将URI作为参数,而不是XML源,因此您必须使用另一个。

更新:

我看到你已经更新了你的问题,xml在sb中;这将是:

            DocumentBuilderFactory documentBuilderFactory
                    = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder
                    = documentBuilderFactory.newDocumentBuilder();
            Document document = documentBuilder.parse(
                    new InputSource(new StringReader(sb)));
            doSomethingWith(document);