看起來JAXP允許爲文檔節點分配任何值,包括<,>和&等。使用XML保留字符和XSLT引發了一個問題。請看下面的代碼:關於JAXP,XSLT和XML保留字符
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
...
Element field = doc.createElement("col");
field.setTextContent("<p>&]]");
row.appendChild(field);
...
TransformerFactory factory = TransformerFactory.newInstance();
Source xslt = new StreamSource(new File("templateName.xsl"));
Transformer transformer = factory.newTransformer(xslt);
transformer.transform(new DOMSource(doc), new StreamResult(printer));
現在,如果我們有
<xsl:value-of select="col" disable-output-escaping="yes"/>
在 「templateName.xsl」
,輸出將看起來像
"<p>&]]"
,如果我們有這樣的
<xsl:value-of select="col"/>
輸出將是
<p>&]]
所以基本上我的問題是,什麼樣的內部數據表示JAXP的使用,使得該
"<p>&]]"
是OK?它不能是文本節點,也不能是CDATA節點。它是什麼?我相信,必須爲轉換提供有效的XML文檔。另一方面,disable-output-escaping屬性表示特殊字符應該按原樣輸出,這是否意味着我們的「col」節點保留在代碼中? XML文檔如何有效呢?