2012-04-11 2 views
2

У меня возникли проблемы с формированием отображения XML в HTML с помощью XSL.XML/XSLT Transform Logic/If Statement/Hide Some Line

У меня есть следующий XML:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<Send_Email> 
<Send_Email_lookupID>HIDE_REJECT</Send_Email_lookupID> 
<Error_Message>REJECT1</Error_Message> 
<Error_Message>REJECT2</Error_Message> 
<Error_Message>REJECT3</Error_Message> 
</Send_Email> 

И в XSL:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<html> 
<body> 
<h2>Result</h2> 
<table border="1"> 
<xsl:for-each select="/Send_Email"> 
<xsl:if test="not(/Send_Email_lookupID)"> 
<tr> 
<td><xsl:value-of select="*"/></td> 
</tr> 
</xsl:if> 
</xsl:for-each> 
</table> 
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

Эта линия всегда статичны и должны быть скрыты:

<Send_Email_lookupID>HIDE_REJECT</Send_Email_lookupID> 

следующий набор строк могут быть разными каждый раз, но все должны отображаться.

Может ли кто-нибудь помочь мне здесь?

Спасибо заранее.


Update - Правильное решение

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<html> 
<body> 
<h2>Result</h2> 
<table border="1"> 
<xsl:for-each select="Send_Email/*[local-name()!='Send_Email_lookupID']"> 
<tr> 
<td><xsl:value-of select="."/></td> 
</tr> 
</xsl:for-each> 
</table> 
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

ответ

2

Я предполагаю, что вы хотите таблицу с одной строкой для каждого сообщения об ошибке - чем то, что вы ищете:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="/"> 
    <html> 
     <body> 
     <h2>Result</h2> 
     <table border="1"> 
      <xsl:for-each select="Send_Email/Error_Message"> 
      <tr> 
       <td><xsl:value-of select="."/></td> 
      </tr> 
      </xsl:for-each> 
     </table> 
     </body> 
    </html> 
    </xsl:template> 

</xsl:stylesheet> 

/Send_Email_lookupID матчи корневой элемент, потому что он начинается с /, но в вашем XML элемент с этим именем не является корневым.

Если вы не хотите, чтобы соответствовать только Error_Message, но каждый элемент под Send_Email кроме Send_Email_lookupID использования:

  <xsl:for-each select="Send_Email/*[local-name()!='Send_Email_lookupID']"> 

, что означает «все элементы под Send_Email, кроме названных Send_Email_lookupID.

Обратите внимание, что <xsl:value-of select="*"/> выводит текст, содержащийся во всех подэлементах текущего узла, тогда как <xsl:value-of select="."/> выводит текст, содержащийся в текущем узле, - это то, что мы хотим в этом случае.

+0

use , если вы хотите скрыть на основе значения узла. – Nat

+0

Он по-прежнему возвращает null для меня. Я отправлю новый XSLT в исходный вопрос. – gp80586

+0

Извините - опечатка - это должно быть 'select =". "' - Я исправил свой ответ – MiMo