我正在尝试将XML数据保存在AWS S3上的.xml文件中。所以我在字符串中构建xml并传递给aws。文件已写入,但xml数据有一些网址,并在该网址上显示Xml Parsing Error: Not Well formed
。
请参阅以下图片。
它给了我错误的新 = ,但第二个不是第一个。如果我编码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应该在没有编码/解码的情况下正确写入。
答案 0 :(得分:4)
您必须在网址中将&
替换为&
,因为仅&
在XML中具有特殊含义,因为它是实体引用的第一个字符。
答案 1 :(得分:2)
通常,不要尝试通过字符串连接来构建XML,使用专用的API,如Java(DOM,XOM,JDOM)或https://docs.oracle.com/javase/7/docs/api/javax/xml/stream/XMLStreamWriter.html中提供的各种基于树的API之一。