XML转义码

时间:2012-09-24 16:48:59

标签: java xml string

我写了一个方法来检查&amp ;.的XML字符串。

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

<&amp; lt

>&amp; gt

\&amp; guot

&&amp; amp

\&amp; 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;
}   

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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>
<>"&'