gpt4 book ai didi

html - 使用 XSLT 的条件显示..?

转载 作者:行者123 更新时间:2023-11-28 03:44:28 25 4
gpt4 key购买 nike

下面是我的 XML 代码 -

<topic no=1>
<desc>......</desc>
<references>
<book>XSLT Essentials</book>
<chapter>11</chapter>
<book>XSLT Cookbook</book>
<chapter>10</chapter>
</references>
</topic>

<topic no=2>
<desc>......</desc>
<references>
<book>Javascript in 10 mins</book>
<chapter>11</chapter>
</references>
</topic>

<topic no=3>
<desc>......</desc>
<references>
<book></book>
<chapter></chapter>
</references>
</topic>

首先我解释一下情况。

仅与引用标记相关的 HTML 输出,我正在寻找的是 -

主题 no=1

<table><tr>
<td>Book</td><td>Chapter</td></tr>
<tr>
<td>XSLT Essentials</td><td>11</td></tr>
<tr>
<td>XSLT Cookbook</td><td>10</td></tr>
</table>

……

主题 no=2

<table><tr>
<td>Book</td><td>Chapter</td></tr>
<tr>
<td>Javascript in 10 mins</td><td>11</td></tr>
</table>

……

主题编号=3没有表格,因为没有使用引用。

这是一个示例,因此 XML 文件在第一种情况下仅包含 2 个引用,但这些引用在某些情况下甚至可能达到 12 个,在某些情况下甚至可能达到 0(零)。

祝你有美好的一天 - 约翰 :)

最佳答案

这可能是最简单和最短的解决方案之一。请注意,根本没有使用明确的条件指令:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="topic/*|text()"/>

<xsl:template match="/*[topic]">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="topic/references[book/text()]">
<table>
<tr><td>Book</td><td>Chapter</td></tr>
<xsl:apply-templates select="book"/>
</table>
</xsl:template>

<xsl:template match="book">
<tr>
<td><xsl:value-of select="."/></td>
<td><xsl:value-of select=
"following-sibling::chapter[1]"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>

应用于提供的输入文本(更正为格式正确的 XML 文档):

<t>
<topic no="1">
<desc>......</desc>
<references>
<book>XSLT Essentials</book>
<chapter>11</chapter>
<book>XSLT Cookbook</book>
<chapter>10</chapter>
</references>
</topic>
<topic no="2">
<desc>......</desc>
<references>
<book>Javascript in 10 mins</book>
<chapter>11</chapter>
</references>
</topic>
<topic no="3">
<desc>......</desc>
<references>
<book></book>
<chapter></chapter>
</references>
</topic>
</t>

产生了想要的、正确的结果:

<table>
<tr>
<td>Book</td>
<td>Chapter</td>
</tr>
<tr>
<td>XSLT Essentials</td>
<td>11</td>
</tr>
<tr>
<td>XSLT Cookbook</td>
<td>10</td>
</tr>
</table>
<table>
<tr>
<td>Book</td>
<td>Chapter</td>
</tr>
<tr>
<td>Javascript in 10 mins</td>
<td>11</td>
</tr>
</table>

说明:适当使用模板模式匹配。

Dimitre 规则:每当您有明确的条件指令(<xsl:if><xsl:choose><xsl:when> 等)时,这可能意味着您没有使用模板模式匹配如你所愿。

要详细了解完全避免条件指令的好处:阅读这个基本的 Pluralsight 类(class):

Tactical Design Patterns in .NET: Control Flow

来自 Zoran Horvat

关于html - 使用 XSLT 的条件显示..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7764611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com