URL中的&符号使得XML格式不正确?

时间:2016-01-06 15:23:07

标签: java xml url amazon-s3

我正在尝试将XML数据保存在AWS S3上的.xml文件中。所以我在字符串中构建xml并传递给aws。文件已写入,但xml数据有一些网址,并在该网址上显示Xml Parsing Error: Not Well formed

请参阅以下图片。

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应该在没有编码/解码的情况下正确写入。

2 个答案:

答案 0 :(得分:4)

您必须在网址中将&替换为&amp;,因为仅&在XML中具有特殊含义,因为它是实体引用的第一个字符。

答案 1 :(得分:2)

通常,不要尝试通过字符串连接来构建XML,使用专用的API,如Java(DOM,XOM,JDOM)或https://docs.oracle.com/javase/7/docs/api/javax/xml/stream/XMLStreamWriter.html中提供的各种基于树的API之一。