2017-07-24 74 views
0

我想用Java解析XML。 的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。

謝謝

+6

那麼你試圖解析一個不是XML的字符串。您需要從JSON中獲取AttributesXml屬性的*值*,然後解析*。目前尚不清楚所有這些來自哪裏,或者其他代碼是什麼樣的,但您應該首先理解的是獲取有效的XML。 –

+0

首先,獲取正確的XML,然後對其進行規範化,然後使用getElementsByTagName方法獲取值。 – srp321

+0

感謝您的意見。我已經改變它並獲得AttributesXml的值,但現在我得到一個錯誤。我已更新我的問題 –

回答

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); 
     } 

但隨着一個字符串參數的方法解析期待一個URI作爲參數,而不是XML源,因此必須使用另外一個。

UPDATE:

我看到你更新你的問題,和XML是在某人;這將是:

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

我已經測試過它,就像您描述的那樣。它可以去 –

+0

@ mg.mg.92查看更新 –