我的xslt转换规则的一部分:
<xsl:if test="boolean(userSearch)">
<xsl:copy-of select="userSearch"/>
</xsl:if>
在输入文件中我有:
<userSearch>
<baseDn><![CDATA[ou=T10 Entitlement,dc=mycompany,dc=com]]></baseDn>
<filter><![CDATA[(objectClass=person)]]></filter>
<scope>SUBTREE</scope>
<identifierAttribute><![CDATA[cn]]></identifierAttribute>
</userSearch>
在输出文件中,我有CDATA批次:
<userSearch>
<baseDn>ou=T10 Entitlement,dc=mycompany,dc=com</baseDn>
<filter>(objectClass=person)</filter>
<scope>SUBTREE</scope>
<identifierAttribute>cn</identifierAttribute>
</userSearch>
可能是什么原因?
答案 0 :(得分:0)
好的。简短的回答是:
我们应在cdata-section-elements
部分使用<xsl:output
atrribute声明哪些标签包含CDATA。
基本上,我们应该在转换时将CDATA
保存在其中,以确保我们想要安全的所有标记。
像这样:
<xsl:output
method="xml"
indent="yes"
version="1.0"
encoding="UTF-16"
standalone="yes"
cdata-section-elements="baseDn filter scope cn member"
/>
实际上,我在这里找到了这个答案:http://www.bernzilla.com/2008/02/12/utilizing-cdata-section-elements-in-xsl/
修改强>
在下面发表评论之后,我准备了一个小测试:
实际上CDATA DO有帮助,但并非适用于所有情况:
public class Escaping {
public static void main(String[] args) throws Exception {
String result = "]]>/\\hello<>"; // this line is killing for CDATA if not escaping
//result = StringEscapeUtils.escapeXml(result); // we have to use escaping in any case
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
// CDATA does not help
xml += "<tag><![CDATA[" + result + "]]></tag>"; // even if we use CDATA
//xml += "<tag>" + result + "</tag>"; // this is ok if 'result' is escaped
System.out.println(xml);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder doc = dbf.newDocumentBuilder();
doc.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("utf-8"))));
System.out.println("well formed");
}
}