html - XML/XSLT 转换逻辑/If 语句/隐藏某些行

标签 html xml xslt

我在使用 XSL 将 XML 显示格式化为 HTML 时遇到问题。

我有以下 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>

下一组行可能每次都不同,但都需要显示。

有人可以帮我吗?

提前致谢。


更新 - 正确的解决方案

<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> 

最佳答案

我假设您想要一个表格,其中每条错误消息都包含一行 - 而不是您正在寻找的是:

<?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_MessageSend_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="."/>输出当前节点中包含的文本 - 这就是我们在本例中想要的。

关于html - XML/XSLT 转换逻辑/If 语句/隐藏某些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10113960/

相关文章:

java - 出于有害目的在 XML 中注入(inject) Java 字节码

java - 无法为 intellij 解析符号 @integer/google_play_services_version

xml - 使用 namespace 通过 xsl 转换 xml

javascript - 将属性插入 XSLT 工作表内的 javascript 时出现问题

javascript - 如何使用 HTTP POST 请求将参数发送到 Iframe

c# - C#中使用XML文件存储数据

java - 从 html 文件解析图像 url

xml - XSLT 1.0 从元素中删除 xmlns =""

html - 如何创建一个包含堆叠文本的 div/按钮?

jquery - 使用阴影禁用 jquery 中的 div