javascript
  • xml
  • xslt
  • 2010-03-15 83 views 0 likes 
    0

    我有以下XMLXSLT通节点到CDATA JS

    <AAA> 
        <BBB>Total</BBB> 
    </AAA> 
    

    使用xsl与下面的XSLT转化它是:标签复制的,因为我想用XML来创建JS一个XML文档。

    <xsl:template match="/"> 
        <![CDATA[ 
        function myFunc() { 
         xmlStr = ']]><xsl:copy-of select="/"/><![CDATA['; 
        } 
        ]]> 
    </xsl:template> 
    

    输出看起来像这样

    function myFunc() { 
         xmlStr = '<AAA> 
        <BBB>Total</BBB> 
    </AAA>'; 
        } 
    

    JS不喜欢,因为结束了线缺少分号了这一点。 如何解决我的XSL得到以下结果:

    function myFunc() { 
        xmlStr = '<AAA><BBB>Total</BBB></AAA>'; 
    } 
    

    我试过正常化空间()和翻译(),但他们从XML剥去标签。

    谢谢!

    回答

    1

    使用xsl:strip-space element

    <xsl:strip-space elements="AAA"/> 
    <xsl:template match="/"> 
    <![CDATA[ 
        function myFunc() { 
        xmlStr = ']]><xsl:copy-of select="AAA"/><![CDATA['; 
        } 
    ]]> 
    </xsl:template> 
    

    它会复制之前删除所有从元素AAA的空白。不过,您必须小心,因为它会从AAA以下的文本节点中删除任何内部空格,所以这有点矫枉过正。如果您有某些空间需要保留的元素,请在xsl:preserve-space元素中将其列为例外。但从你的例子来看,我不认为这会是一个问题。

    +1

    @davomarti:确保您的XML永远不会包含任何单引号,否则您的JavaScript将会中断。特别是,确保你的XML不包含用户生成的数据,因为这种方法具有很高的XSS风险。最好的方法是通过AJAX从服务器中单独请求XML,而不是直接将它注入到JS代码中。 – Tomalak 2010-03-15 19:40:01

    +0

    感谢Welbog, 这就是我一直在寻找的。 Tomalak, 这很有意义,但我在一个框架内工作,我能做的最好的就是通过xsl获取xml。 – davomarti 2010-03-15 20:32:43

    +0

    @davomarti - 提示:如果答案解决了您的问题,您应该将其标记为已接受。 – Tomalak 2010-03-16 10:12:58

    相关问题