2013-07-26 29 views
1

我要生成我怎样才能把 到内容与XOM

<td>&nbsp;</td> 

使用xom

这些都不工作:

private static void test(String s) { 
    Element e = new Element("td"); 
    e.appendChild(s); 
    System.out.println("XML(\"" + s + "\"): " + e.toXML()); 
} 

private static void test() throws UnsupportedEncodingException { 
    final String nbsp = "\u00A0"; 
    final String nbsp2 = "\uC2A0"; 
    final String nbsp3 = "&#038;nbsp;"; 
    test(nbsp); 
    test(nbsp2); 
    test(nbsp3); 
    test("&nbsp;"); 
    final byte[] b = nbsp.getBytes("UTF-8"); 
    test(new String(b, "UTF-8")); 
} 

我得到

XML(" "): <td> </td> 
XML("슠"): <td>슠</td> 
XML("&#038;nbsp;"): <td>&amp;#038;nbsp;</td> 
XML("&nbsp;"): <td>&amp;nbsp;</td> 
XML(" "): <td> </td> 

什么想法?

字符编码在我的IDE中设置为“UTF-8”。

回答

0

我建议你不要使用toXML(),而是使用nu.xom.Serializer,它通常会给出明确的数字实体引用。

串行器应该给出明确的数字实体引用(&#160;)。如果您确实需要&nbsp;,则可能必须继承Serializer并覆盖Text方法。

要使用串行尝试:

OutputStream out = new FileOutputStream(file); 
    Serializer ser = new Serializer(out); 
    ser.write(doc); 
    out.close(); 

,如果你要继承它串行变得更加棘手。

+0

听起来很有希望 - 你有没有访问任何示例代码彼得? – OldCurmudgeon

+0

先尝试序列化程序,看看它给了什么。如果它给 这对你来说足够好吗? (所有浏览器和其他工具都应该处理它)。 –

+0

在序列化程序源代码中插入一些暗示它也使用了“文本”,这也是问题的主要原因。我会看看我能解决什么问题。现在我在'toXML'输出上做了一个String.replace(“”,“&nbsp”)',但这是一个可怕的黑客。 – OldCurmudgeon