1

我的 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>

可能是什么原因?

4

1 回答 1

0

好的..简短的回答是:

cdata-section-elements我们应该在您的<xsl:output部分中使用属性声明哪些标签包含 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 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");

}

}

于 2013-07-05T19:09:23.657 回答