我写了一个方法来检查&amp ;.的XML字符串。
我需要修改方法以包含以下内容:
<
&amp; lt
>
&amp; gt
\
&amp; guot
&
&amp; amp
\
&amp; apos
这是方法
private String xmlEscape(String s) {
try {
return s.replaceAll("&(?!amp;)", "&");
}
catch (PatternSyntaxException pse) {
return s;
}
} // end xmlEscape()
这是我使用它的方式
sb.append(" <Host>" + xmlEscape(url.getHost()) + "</Host>\n");
如何修改我的方法以合并其余符号?
修改
我想我一定不能正确地说出这个问题。
在xmlEscape()
方法中,我想检查以下字符的字符串
<
>
'
"
&
,如果找到,我想用正确的字符替换找到的字符。
示例:如果有一个char &
,则char将替换为&
;在字符串中。
你能做一些简单的事情吗
try {
s.replaceAll("&(?!amp;)", "&");
s.replaceAll("<", "<");
s.replaceAll(">", ">");
s.replaceAll("'", "'");
s.replaceAll("\"", """);
return s;
}
catch (PatternSyntaxException pse) {
return s;
}
答案 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><>"&'</foo>
<>"&'