【发布时间】:2023-03-18 18:01:02
【问题描述】:
我想使用 Apache XMLBeans 转义字符串,以便将其嵌入 XML 文档中,例如对所有 XML 实体进行编码。
XmlString 确实提供了此功能,但坚持将输出包装在 xml-fragment 标记中,我想摆脱它。
但是,我对建议不感兴趣
- 使用除 XMLBeans 以外的任何东西(如 org.apache.commons.lang.StringEscapeUtils)
- 在转义后删除封闭标签(例如使用正则表达式)
这是一个测试用例。你能帮我修一下吗?
import org.apache.xmlbeans.*;
public class Test {
@Test public void test(){
String input = "You & me";
String expected = "You & me";
String actual = escape(input);
Assert.assertEquals(expected, actual);
// Fails with: ComparisonFailure: expected:<[You & me]>
// but was:<[<xml-fragment>You & me</xml-fragment>]>
}
private String escape(String str){
XmlString value = XmlString.Factory.newInstance();
value.setStringValue(input);
XmlOptions opts = new XmlOptions();
// do I need to set one of the 54 available options?
// see http://xmlbeans.apache.org/docs/2.4.0/reference/org/apache/xmlbeans/XmlOptions.html
return value.xmlText(opts);
}
}
【问题讨论】:
-
如果 XmlBeans 没有自动转义必须转义的内容,我会感到非常惊讶。为什么要手动逃跑?
-
JB Nizet:我正在使用 XMLBeans 来实现自定义 XML 编组框架的一部分。我并不是要暗示 XmlBeans 不会自动转义必须转义的内容。
-
你为什么不能使用例如字符串逃逸工具?这可能会揭示一些不清楚的要求。
-
Ed:我确实可以使用 StringEscapeUtils,这就是我目前正在使用的。但是鉴于所需的功能已经在 XMLBeans 中,我想摆脱 Commons Lang 依赖。
标签: java xml escaping xmlbeans