2014-09-20 51 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

相关问题