据我所知,XML有5个必须转义的特殊字符(",',<,>,&) 我正在尝试实施以下内容:
输入xml:
<?xml version = "1.0"?>
<class>
<student id = "999">
<firstname>Tes"Ting</firstname>
<lastname>He'llo</lastname>
<nickname1>W<or>ld</nickname>
<nickname2>star&wars</nickname2>
</student>
</class>
输出XML:
<?xml version = "1.0"?>
<class>
<student id = "999">
<firstname>Tes"Ting</firstname>
<lastname>He'llo</lastname>
<nickname>W<orl>d</nickname>
<nickname2>star&wars</nickname2>
</student>
</class>
以下是我的代码,如果有单引号(&#39;)和双引号(&#34;),它可以正常工作。 当代码找到&amp;,&lt;,&gt; ..时,XML解析器会抛出错误。任何人都可以建议如何实施?有什么想法吗?
import org.xml.sax.SAXException;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.IOException;
import com.vordel.trace.Trace;
import org.xml.sax.InputSource;
import org.apache.commons.lang.StringEscapeUtils;
========Logic=====
def input = <input xml in string>
def temp;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(new StringReader(input)));
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("student");
for (temp = 0; temp < nList.getLength(); temp++)
{
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
escapedfirstname= StringEscapeUtils.escapeXml(eElement.getElementsByTagName("firstname").item(0).getTextContent() );
escapedlastname= StringEscapeUtils.escapeXml(eElement.getElementsByTagName("lastname").item(0).getTextContent() );
}
}
答案 0 :(得分:1)
这是不可能的。这不是&#34; can&#34;为这些字符进行转义 - 在某些情况下,必须转义。例如,您如何区分文本<or>
和标记<or>
? XML设计者提出的解决方案是,对于常规文本,如果某些字符是文本内容,则必须对其进行转义 - 在这种情况下,开括号<
需要表示为{{1 }}
<
和<
进行转义,以避免与标记和转义码混淆。所有字符都可以使用数字转义码(例如&