java - 使用 Apache XMLBeans 对字符串中的 XML 实体进行编码

标签 java xml escaping xmlbeans

我想使用 Apache XMLBeans 转义字符串以将其嵌入 XML 文档中,例如对所有 XML 实体进行编码。

XmlString 确实提供了此功能,但坚持将输出包装在 xml 片段标记中,我想摆脱它。

但是,我对建议不感兴趣

  • 使用 XMLBean 以外的任何内容(例如 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 &amp; me]> 
    //             but was:<[<xml-fragment>You &amp; 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);
  }
}

最佳答案

在将 XmlOptions 传递给 xmlText() 方法之前使用 setSaveOuter() 选项。像这样。

XmlOptions opts = new XmlOptions();
opts.setSaveOuter();
return value.xmlText(opts);

我想澄清一下,如果您只是凭空创建一个新元素,那么元素名称似乎不会被序列化。例如,如果我有一个 Model 元素,上面有一个 Property 元素,则以下内容将不会显示属性标签,而是显示 xml 片段。

Property property = Property.Factory.newInstance(); 

XmlOptions opts = new XmlOptions();
opts.setSaveOuter();
return property.xmlText(opts);

要显示属性元素,我必须执行以下操作。

ModelDocument modelDoc = ModelDocument.Factory.newInstance();
ModelType model = modelDoc.addNewModel();
PropertyType propertyType = model.addNewProperty();
Property property = Property.Factory.newInstance(); 

XmlOptions opts = new XmlOptions();
opts.setSaveOuter();
return property.xmlText(opts);

关于java - 使用 Apache XMLBeans 对字符串中的 XML 实体进行编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623490/

相关文章:

java.net.URISyntaxException : Illegal character in query at index 177

java - libgdx 中的输入处理器/多路复用器

javascript - knockout 'attr' 是否总是假设输入需要转义,是否可以将其关闭?

Python Tkinter 按键特殊情况

ruby - 使用适当的参数转义从 ruby​​ 调用 shell 命令

java - Eclipse 命令

Java 8 根据条件应用流过滤器

JavaFX 允许用户仅编辑文本的某些区域

c# - 什么会导致 XML 文件被空字符填充?

找不到 Java SAXParserFactory 和 XMLParserConfiguration 文件