我正在通过文档构建器工厂自动更改某些XML文件
但在其中一个属性实体引用'
中更改为'
。我不希望这种改变发生。
docBuilderFactory.setValidating(false);
docBuilderFactory.setExpandEntityReferences(false);
但似乎没有任何效果
答案 0 :(得分:1)
这更像是一个黑客攻击,但你可以在处理之前将其转义:
myXmlString = myXmlString.replaceAll("'", "'").
然后处理器会将'
扩展为'
。
答案 1 :(得分:0)
真正的问题是'
只是摆脱撇号的一种方式。这就像在JavaScript中读取字符串:'\''
,一旦数据被解释为字符串,解析器就会扩展转义字符(XML中的实体)。也就是说,从原始字符到=的解析步骤从根本上包括这种解释,并且没有好办法。
据推测,真正的问题是转换后输出有效的XML,问题在于解析原始输入字符串并将实体扩展为撇号。幸运的是,这是一个简单的解决方法:如果您知道某些属性可能包含撇号,则可以对输出步骤进行编码以包含搜索&替换pass,'
转换为'
。
(这类似于在JavaScript中编写原始JavaScript字符串并且必须将撇号转换回\'
)