2014-09-20 47 views
0

看一箇舊的xslt(據我所知,工作是由其他人在很久以前編寫的)標記在循環之前開始,然後在循環內部關閉並重新打開並最終關閉循環完成後。所以所有的標籤都會匹配。但是當我嘗試在VS 2013中查看它時,我得到的開始標記與結束標記錯誤不匹配。關閉然後在循環中打開標記

這有可能這個從來沒有工作......

反正結構看起來就像..

<div> 
    Blah 
    <xsl:for-each> 
     different blah 
     <xsl:if> 
</div> 
<div> 
     Yet more blah 
     </xsl:if> 
    </xsl:for-each> 
</div> 

是否有一個快速的方法來得到這個工作,但不嘗試重組東西都同一個循環?

+2

這不能工作,因爲現有的XML必須有效。這不是有效的XML,期限。 – 2014-09-20 02:03:53

+0

只有當您輸出臨時標記爲(轉義)文本並禁用輸出轉義打開時纔有可能。 – 2014-09-20 02:05:39

+1

並不是說它可以工作,但是當你想要分割成組的XML中有連續的元素時,通常會嘗試這種'模式';例如將3個元素的組放入DIV中。還有另一種可以採用的方法,但是如果你給出了輸入XML,XSLT(即'for-each'和'if'的'select'屬性)的更多信息, ,和預期的輸出(如果你能解決它!)謝謝! – 2014-09-20 09:00:25

回答

1

有沒有一種快速的方法來得到這個工作,而不是嘗試 重構所有東西在同一個循環?

這是可能的,如果你輸出的干預的標籤,文本,與disable-output-escaping開啓 - 例如:

... 
<div> 
    <!-- something --> 
    <xsl:for-each select="item"> 
     <!-- something --> 
     <xsl:if test="@divide='yes'"> 
      <xsl:text disable-output-escaping="yes">&lt;/div>&#10;&lt;div></xsl:text> 
      <!-- something --> 
     </xsl:if> 
    </xsl:for-each> 
</div> 
... 

當然,這是一個可怕的黑客,你應該採取的第一個機會來代替它與一些體面的代碼。

+0

謝謝,並同意所有的觀點。我希望我的有限知識導致我要花很多時間在不能花很多時間的事情上(比如讓它破碎),或者使用一些似乎每個人都稱爲可怕的黑客的東西。是一個完全可以接受的解決方案,等待被發現。現在我已經確認它是重寫還是黑客,我可以繼續前進。 – jmoreno 2014-09-21 06:22:32

+0

@jmoreno請記住,我們不知道這裏正在處理什麼,以及發生「分裂」的條件是什麼。也許重寫是微不足道的? – 2014-09-21 07:11:20

相關問題