我正在创建一个Web服务,该服务接收字符串并将其转换为XML。 XML创建是通过java dom4j完成的。字符串的格式如下:
<form01><Textbox1 id="Textbox1" dataType="java.lang.String" perDataProId="">Site1</Textbox1><Textbox2 id="Textbox2" dataType="java.lang.String" perDataProId="">Site1</Textbox2></form01>
为避免XML无效字符,我想可以使用StringReader读取字符串并删除&,但我想知道如何删除<和>?例如,如果输入字符串为
<form01><Textbox1 id="Textbox1" dataType="java.lang.String" perDataProId="">Site<1</Textbox1><Textbox2 id="Textbox2" dataType="java.lang.String" perDataProId="">Site1</Textbox2></form01>
如何在保留“ Site <1”中的“ <”的同时让其他人喜欢? 有什么建议吗?
答案 0 :(得分:0)
通常,在XML DOM中设置文本或稍后再获取时,XML API会很小心。
某些字符将转换为XML实体:< > " ' &
。
在某些XML版本中也有some Characters not allowed,例如\u0000
。
apache.commons.lang有一个StringEscapeUtils.escapeXML
,如果您需要自己以纯文本格式进行转换。
答案 1 :(得分:0)
您可以使用以下RegExp:
public static void main(String[] args)
{
String str = "<form01><Textbox1 id=\"Textbox1\" dataType=\"java.lang.String\" perDataProId=\"\">Site<1</Textbox1><Textbox2 id=\"Textbox2\" dataType=\"java.lang.String\" perDataProId=\"\">Site1>a</Textbox2><Textbox3 id=\"Textbox2\" dataType=\"java.lang.String\" perDataProId=\"\">Site1&</Textbox3></form01>";
System.out.println(str.replaceAll("(>[^<>]*)<([^<>]*<\\/)", "$1<$2"));
System.out.println(str.replaceAll("(>[^<>]*)>([^<>]*<\\/)", "$1>$2"));
System.out.println(str.replaceAll("(>[^<>]*)\\&([^<>]*<\\/)", "$1&$2"));
}
结果:
<form01><Textbox1 id="Textbox1" dataType="java.lang.String" perDataProId="">Site<1</Textbox1><Textbox2 id="Textbox2" dataType="java.lang.String" perDataProId="">Site1>a</Textbox2><Textbox3 id="Textbox2" dataType="java.lang.String" perDataProId="">Site1&</Textbox3></form01>
<form01><Textbox1 id="Textbox1" dataType="java.lang.String" perDataProId="">Site<1</Textbox1><Textbox2 id="Textbox2" dataType="java.lang.String" perDataProId="">Site1>a</Textbox2><Textbox3 id="Textbox2" dataType="java.lang.String" perDataProId="">Site1&</Textbox3></form01>
<form01><Textbox1 id="Textbox1" dataType="java.lang.String" perDataProId="">Site<1</Textbox1><Textbox2 id="Textbox2" dataType="java.lang.String" perDataProId="">Site1>a</Textbox2><Textbox3 id="Textbox2" dataType="java.lang.String" perDataProId="">Site1&</Textbox3></form01>
无论如何,我都会考虑使用Guava HtmlEscapers。这种情况下的RegExp开销很小。