0

我已经编写了一个方法来检查我的 XML 字符串中的 &。

我需要修改该方法以包括以下内容:

<<

>>

\&guot

&&

\&apos

这是方法

private String xmlEscape(String s) {
    try {
        return s.replaceAll("&(?!amp;)", "&amp;");
    }
    catch (PatternSyntaxException pse) {
        return s;
    }
} // end xmlEscape()

这是我使用它的方式

 sb.append("            <Host>" + xmlEscape(url.getHost()) + "</Host>\n");

如何修改我的方法以合并其余符号?

编辑

我想我一定不能正确地表达这个问题。在xmlEscape()我想检查以下字符的字符串的方法中 < > ' " &,如果找到它们,我想用正确的字符替换找到的字符。

示例:如果有 char &,则 char 将替换为&amp; 在字符串中。

你能做一些简单的事情吗

try {
   s.replaceAll("&(?!amp;)", "&amp;");
   s.replaceAll("<", "&lt;");
   s.replaceAll(">", "&gt;");
   s.replaceAll("'", "&apos;");
   s.replaceAll("\"", "&quot;");
   return s;
}
catch (PatternSyntaxException pse) {
   return s;
}   
4

2 回答 2

4

您可能需要考虑使用 Apache commons StringEscapeUtils.escapeXml 方法或其他许多 XML 转义实用程序之一。这使您可以正确转义到 XML 内容,而不必担心在需要转义除主机名之外的其他内容时丢失某些内容。

于 2012-09-24T20:18:24.730 回答
2

或者,您是否考虑过使用StAX (JSR-173) API 来编写 XML 文档,而不是将字符串附加在一起(JDK/JRE 中包含一个实现)?这将为您处理所有必要的字符转义:

package forum12569441;

import java.io.*;
import javax.xml.stream.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        // WRITE THE XML
        XMLOutputFactory xof = XMLOutputFactory.newFactory();

        StringWriter sw = new StringWriter();
        XMLStreamWriter xsw = xof.createXMLStreamWriter(sw);
        xsw.writeStartDocument();
        xsw.writeStartElement("foo");
        xsw.writeCharacters("<>\"&'");
        xsw.writeEndDocument();

        String xml = sw.toString();
        System.out.println(xml);

        // READ THE XML
        XMLInputFactory xif = XMLInputFactory.newFactory();
        XMLStreamReader xsr = xif.createXMLStreamReader(new StringReader(xml));
        xsr.nextTag(); // Advance to "foo" element
        System.out.println(xsr.getElementText());
    }

}

输出

<?xml version="1.0" ?><foo>&lt;&gt;"&amp;'</foo>
<>"&'
于 2012-09-24T20:31:14.803 回答