sorry,我是直接将其它论坛里的内容贴过来的,所以其中的一些私有标签还在,我重发如下:请教 XML解析时实体引用的问题
我的XML文件有如下的内容片段:<card id="card2">实体引用 &amp;#169;&amp;copy;<br/></card>其中的&amp;#169;&amp;copy;都是版权符号,在IE等浏览器中直接打开,以上两个实体都可以正常被显示,但是用dom4j解析后&amp;#169;就变成了问号——?(&amp;copy;保持未变)。我的dom4j的解析代码大致如下:SAXReader reader = new SAXReader();
reader.setEntityResolver(new LocalEntityResolver());
Document doc = reader.read(inputsource);其中的LocalEntityResolver类实现了本地dtd的load,dtd中定义有实体申明,如下:<!ENTITY quot "&amp;#34;">
<!ENTITY amp  "&amp;#38;">
<!ENTITY apos "&amp;#39;">
<!ENTITY lt   "&amp;#38;#60;">
<!ENTITY gt   "&amp;#62;">
<!ENTITY nbsp "&amp;#160;">
<!ENTITY copy "&amp;#169;">
<!ENTITY shy  "&amp;#173;">请问为什么直接写实体代码(Entity Nubmer)不能被直接解析?应该怎样解决该问题呢?

解决方案 »

  1.   

    <!ENTITY   quot   "&amp;#34;"> 
    <!ENTITY   amp     "&amp;#38;"> 
    <!ENTITY   apos   "&amp;#39;"> 
    <!ENTITY   lt       "&amp;#38;#60;"> 
    <!ENTITY   gt       "&amp;#62;"> 
    <!ENTITY   nbsp   "&amp;#160;"> 
    <!ENTITY   copy   "&amp;#169;"> 
    <!ENTITY   shy     "&amp;#173;"> 
    写错了
    把&这个符号去掉,实体引用申明怎么能带这个呢,定义中不能有,这个必须在正式引用时候作为关键符号的,不知道楼主明白我说的意思不
    <!ENTITY   quot   "amp;#34;">写成这样再试试吧
      

  2.   

    而且你也应该是&quot 引用了"amp;#34;"这个吧
    怎么反正用呢,不太能看明白你的意思啊
      

  3.   

    按你说的方法修改后还是不行,结果是解析器会把amp;照原样输出,例如nbsp 定义成 <!ENTITY nbsp "amp;#160;">,那么
    <p>实体引用&nbsp</p>被解析后就变成了<p>实体引用amp;#160;</p>至于你说反过来的问题 情况是这样的,例如对于xml预定义的5个实体:
    <!ENTITY quot "&#34;"> 
    <!ENTITY amp  "&#38;"> 
    <!ENTITY apos "&#39;"> 
    <!ENTITY lt   "&#38;#60;">
    <!ENTITY gt   "&#62;"> 既可以使用名称如:quot\amp\apos等来引用,也可以是使用变量的值——即#34\#38\#39等来引用。现在问题是 以上5个预定的实体在document中不论以名称或数值来引用都会是正常的,但是当使用nbsp、copy等属于html的实体时 就会出现实体未定义的错误,不管用名称还是数值 都是一样的。