【发布时间】:2021-02-19 12:51:36
【问题描述】:
我正在使用 xslt 文件进行样式设置。我正在以表格格式显示一些内容。我需要从预定义的键值对中动态填充一列。 请看下面的例子
<?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>Sample Transformation</h2>
<table border="1">
<xyz>msgprop</xyz>
<tr bgcolor="#9acd32">
<th>Id</th>
<th>Name</th>
<th>City</th>
</tr>
<xsl:for-each select="en:MyEvent">
<tr>
<td><xsl:value-of select="en:id"/></td>
<td><xsl:value-of select="en:name"/></td>
<td><xsl:value-of select="en:country"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
问题是我收到国家名称代替城市,我想用正确的城市填充城市列,为此我需要映射国家及其城市。有没有办法在键值对中预定义国家及其城市,当收到国家名称时,它将被城市名称替换(如果不存在,它将显示国家名称)。 有什么功能可以做到吗?如果你提供一个 sn-p 会很有帮助。
编辑:这里是xml
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<id>Empire Burlesque</id>
<Name>Bob Dylan</Name>
<country>USA</country>
</cd>
<cd>
<id>Hide your heart</id>
<name>Bonnie Tyler</name>
<country>UK</country>
</cd>
<cd>
<id>Greatest Hits</id>
<name>Dolly Parton</name>
<country>USA</country>
</cd>
<cd>
<id>Still got the blues</id>
<name>Gary Moore</name>
<country>UK</country>
</cd>
</catalog>
我需要一个映射,这样每当国家名称为英国时,它将被替换为与其他国家相同的首都伦敦。是否有某种方法可以将 UK 定义为键,将 London 定义为值,这样每当我收到作为 UK 的键时,它将被其值替换。请帮忙。
【问题讨论】:
-
对于 XSLT 1,通常的方法是在一些 XML 文档(部分)中进行映射,然后简单地使用 XPath 来选择引用的值。 XSLT 3 有一个
map数据类型,因此您不限于 XML。 -
谢谢马丁,但不幸的是我不能使用单独的 xml 文件。我需要在同一个 xslt 中定义城市。
-
XSLT 是 XML,因此您可以将映射定义为 XSLT 文档的一部分,或者作为参数或变量,或者作为顶级的外部命名空间元素。不确定您在哪里苦苦挣扎,
i am receiving country name in place of city是什么意思,您甚至没有显示任何 XML 输入,您的 XSLT 也没有显示任何国家/地区数据或尝试处理它。 -
用一个例子编辑了我的问题。请参考
-
@MartinHonnen 请看看这个问题。这看起来很干净。 stackoverflow.com/questions/66310526/…
标签: java xml xslt xslt-1.0 xslkey