2016-01-06 84 views
2

我正嘗試在AWS S3上的.xml文件中保存xml數據。所以我在字符串中構建xml並傳遞給aws。文件被寫入,但xml數據有一些網址,它在該網址上顯示Xml Parsing Error: Not Well formedURL中的和號使得XML格式不正確?

請看下面的圖片。

enter image description here

enter image description here

它給了我錯誤的新=,但第二個不是第一個。如果我編碼url然後它工作,但我不想編碼url,因爲我需要在每個地方解碼。

這是我的代碼。

 // create header for graphml 
     String str = "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\"" 
       + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" 
       + " xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns" 
       + " http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">" 
       + "<key id=\"n\" for=\"node\" attr.name=\"name\" attr.type=\"string\"/>"      
       + "<graph id=\"G\" edgedefault=\"directed\">"; 
     StringBuilder sb = new StringBuilder(); 
     sb.append(str); 

     Iterable<Node> vertices; 

     vertices = Node_list; 
     // Write all nodes 
     for (Node vertex : vertices) { 
      sb.append("<node id=" + "\"" + vertex.getId().toString() + "\"" 
        + ">");    
       sb.append("<data key=\"n\">" + vertex.getName() + "</data>");    

      // end node tag 
      sb.append("</node>"); 
     }   

     // closing graph tag and graphml tag 
     sb.append("</graph>"); 
     sb.append("</graphml>");    
     // converting string in to inputstream 
     InputStream stream = new ByteArrayInputStream(sb.toString() 
       .getBytes("UTF-8")); 
     // creating meta data graphml file 
     ObjectMetadata metadata = new ObjectMetadata(); 
     metadata.setContentType("text/xml"); 
     metadata.setContentLength(sb.toString().getBytes().length); 
     // send request to S3 to create folder 
     PutObjectRequest putobjreq = new PutObjectRequest(
       CAWSConstants.BUCKETNAME, file, stream, metadata); 
     // put graphml file to aws 
     s3Client.putObject(putobjreq); 

您可以給我任何參考或提示。 Xml應該在沒有編碼/解碼的情況下正確寫入。

回答

4

您必須在URL中替換&&amp;,因爲&在XML中作爲實體引用的第一個字符具有特殊含義。

2

通常,不要嘗試通過字符串連接來構建XML,請使用像Java(DOM,XOM,JDOM)或https://docs.oracle.com/javase/7/docs/api/javax/xml/stream/XMLStreamWriter.html中提供的各種基於樹的API之一的專用API。

+0

我正在使用XMLwriter創建xml,但很難將xmlwriter數據轉換爲inputstream,然後將其發送到s3。這就是爲什麼我選擇創建字符串,然後將其轉換爲輸入流 –