gpt4 book ai didi

html - 如何使用 xsl :if 选择正确的节点值

转载 作者:行者123 更新时间:2023-11-28 01:39:29 24 4
gpt4 key购买 nike

我有 2 个不同的 XML

1 个 XML

<address>
<localityType>CityType</localityType>
<locality>CityName</locality>
</address>

2 个 XML

<address>
<localityType>TownType</localityType>
<locality>TownName</locality>
</address>

我有一个 XSLT 样式表

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html>
<head>
<title>Address</title>
</head>
<body>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td>City</td>
<td>
<xsl:variable name="loc" select="//localityType" />
<xsl:if test="$loc = 'CityType'">
<xsl:value-of select="//locality" />
</xsl:if>
</td>
</tr>
<tr>
<td>Town</td>
<td>
<xsl:variable name="loc" select="//localityType" />
<xsl:if test="$loc != 'CityType'">
<xsl:value-of select="//locality" />
</xsl:if>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

作为结果,我想为第一个 XML 获取下表 enter image description here

作为第二个 XML 的结果 - 下表 enter image description here

我的问题是由于我的 xsl:if 语句,我没有得到这个表。也许我用错了

最佳答案

下面的样式表产生相同的 HTML 输出,没有使用 xsl:variable// 轴。这些构造在 XSLT 中可用的事实并不意味着您应该在任何情况下使用它们。

何时使用 xsl:variable

你应该使用一个变量

  • 不使用它意味着在几个地方重复冗长的表达
  • 存储您在另一个上下文中需要的任何上下文信息
  • 在进行下一步转换之前存储中间结果

您对 xsl:variable 的使用不属于这些类别:表达式很简单,元素 localityType 在上下文中很容易获得,您不需要稍后的结果。

何时使用//(descendant-or-self::axis)

仅当您使用此表达式导航的结构不是静态已知时,才应使用//。在您的情况下,输入 XML 的结构并不完全是事先知道的。您的模板匹配是 / 并且您知道 localityType 元素的完整路径:"address/localityType"

使用 xsl:if 是个好主意。


样式表

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/address">
<html>
<head>
<title>Address</title>
</head>
<body>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td>City</td>
<td>
<xsl:if test="localityType = 'CityType'">
<xsl:value-of select="locality"/>
</xsl:if>
</td>
</tr>
<tr>
<td>Town</td>
<td>
<xsl:if test="localityType = 'TownType'">
<xsl:value-of select="locality"/>
</xsl:if>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

假设以下输入 XML:

<address>
<localityType>CityType</localityType>
<locality>CityName</locality>
</address>

HTML 输出

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Address</title>
</head>
<body>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td>City</td>
<td>CityName</td>
</tr>
<tr>
<td>Town</td>
<td></td>
</tr>
</table>
</body>
</html>

呈现的 HTML

enter image description here

关于html - 如何使用 xsl :if 选择正确的节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26907923/

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