javascript
  • xml
  • xslt
  • 2010-03-15 81 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

    相關問題