Java Don';不读'&;lt';使用JLabel中的XML文件
我有一个XML文件,其中包含符号“<(Java Don';不读'&;lt';使用JLabel中的XML文件,java,html,xml,swing,jlabel,Java,Html,Xml,Swing,Jlabel,我有一个XML文件,其中包含符号“<(Node.getTextContent()已经返回了未转义的文本。因此,当您尝试从获取文本时,返回的是对于JLabel是可以接受的 要解决此问题,在将文本添加到JLabel之前,您可以转义从XML文档中获得的内容 e、 g.使用(注意,这将仅转义 &; &apos; “字符。否则请查看) JLabel=newjlabel(“+StringEscapeUtils.escapeXml(docXml.getValue(“负”,0))+”); 不幸的是
Node.getTextContent()
已经返回了未转义的文本。因此,当您尝试从
获取文本时,返回的是
对于JLabel
是可以接受的
要解决此问题,在将文本添加到JLabel
之前,您可以转义从XML文档中获得的内容
e、 g.使用(注意,这将仅转义
&;
&apos;
“
字符。否则请查看)
JLabel=newjlabel(“+StringEscapeUtils.escapeXml(docXml.getValue(“负”,0))+”);
不幸的是,文档中缺少此信息,因此如果XML包含转义文本,您必须始终小心,不要依赖返回的文本。您可能需要转义尝试显示的内容。您可以使用apache commons来处理
StringEscapeUtils.escapeHtml(String)
应该可以做到这一点。否则,您可以手动转义5个更常见的字符:&
-->
,
,
-->,-->-->&&x27;,”
-->"
虽然在本例中,escapeHtml和escapeXml将返回相同的内容,但在HTML上下文中使用escapeXml感觉有点奇怪,不是吗?我认为这显然取决于需要。我个人选择escapeXml,只要我只需要基本的5次转义,如果我不确定的话,我就选择escapeHtml。同样在lang3中,也有escapeHtmltml4和escapeHtml3,所以我不必麻烦自己使用哪一个,我只使用escapeXml。哦,谢谢你的详细回复!我需要使用以下内容?import org.apache.commons.io.FileUtils;import org.apache.commons.lang.StringEscapeUtils;
@Tomas是的,你需要org.apache.commons.lang.StringEscapeUtils
您不需要FileUtils(至少用于转义)@Tomas是的,这是来自apache commons-。作为替代方案,如果您碰巧使用Spring,您可以尝试此方法或查看此主题-您可以找到一些如何在Java中转义html的替代方案。希望对您有所帮助
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<parent>
<child><100</child>
</parent>
public String getValue(String parentTag, int parentIndex)
{
Node root = m_doc.getElementsByTagName(parentTag).item(parentIndex);
return root.getTextContent();
}
JLabel label = new JLabel("<html><b>"+docXml.getValue("negative", 0) +"</b></html>");
JLabel label = new JLabel("<html><b>"+StringEscapeUtils.escapeXml(docXml.getValue("negative", 0)) +"</b></html>");