2009-07-20 27 views
0

我正在使用dom4j来解析我的xml。比方说,我有这样的事情:dom4j将文本转换为特殊字符

<?xml version="1.0" encoding="UTF-8"?> 
<foo> 
    <bar>&#402;</bar> 
</foo> 

当在看“巴”节点的值,它给我回特殊字符为代表“&#402;”

有没有办法来防止这种情况,只是在文本的实际位读?

回答

1

文本的实际位是&#402;?那么你需要跳过&符号&amp;

+0

我试过,但是,当写入输出xml时,我仍然只想显示“&”符号而不是“&”文本。当然,我可以通过输出文件解析并在文本编辑器中手动将“&”转换为“&”,但我希望不必这样做。 – digiarnie 2009-07-20 01:18:42

+1

那么,阅读和写作是有区别的。为了写作,你可以在org.dom4j.io.XMLWriter上调用setEscapeText(false)来逐字写出你所写的任何内容。如果你这样做,请记住,你的阅读/写作周期将改变文件,所以你必须小心。 – ChssPly76 2009-07-20 04:23:14

2

如果bar节点的值本身包含<或>或&,则会破坏解析器。为了防止这种情况发生,您应该在途中将所有数据都转义出来,然后在途中再次取消注释。

这将您的文档到:

<?xml version="1.0" encoding="UTF-8"?> 
<foo> 
    <bar>&amp;#402;</bar> 
</foo> 

它不吸,但对你的XML。

0

如果您需要此保留数字字符引用&#nnnn字符实体引用&something同时读写XML文件,您可以:

  1. 预进程的输入流替换&例如[$AMPERSAND_CHARACTER$]
  2. 经由DOM4J
  3. 后处理修改XML输出流使回代

参见the example of code