我有这个 XML 数据文件,其中包含以下描述(XML File 1):
<?xml version="1.0" encoding="UTF-8"?>
<Labels Version="170902">
<AppointedAs>Appointed As</AppointedAs>
<Elder>Elder</Elder>
<MinisterialServant>Ministerial servant</MinisterialServant>
<NotAppointed>Not appointed</NotAppointed>
</Labels>
我还有另一个 XML 数据库文件,其中包含有关出版商的详细信息。这是一个精简的示例,用于显示手头的问题(XML 文件 2):
<?xml version="1.0" encoding="utf-8"?>
<PublisherDatabase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.publictalksoftware.co.uk/msa">
<Publishers>
<Publisher Gender="Male" Appointed="MinisterialServant" Serving="Publisher">
<Name>Brian Wood</Name>
</Publisher>
</Publishers>
</PublisherDatabase>
现在,您能看到XML 文件 2 中的Appointed属性吗?这些值在XML 文件 1中重复,而XML 文件 1又包含正确的描述。
为了做我需要的事情,我目前正在使用这个 XSL 脚本:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msa="http://www.publictalksoftware.co.uk/msa">
<xsl:output method="html" indent="yes" version="4.01"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="//W3C//DTD XHTML 1.0 Transitional//EN"/>
<xsl:variable name="PubDB" select="document('MSA_PublisherDatabase.XML')"/>
<xsl:variable name="Labels" select="document('LabelsInfo.XML')"/>
<xsl:template match="/">
<html>
<head>
<title>Publishers Report</title>
<link rel="stylesheet" type="text/css" href="Custom Publisher Report.css"/>
</head>
<body>
<table>
<thead>
<th class="cellVerticalHeading">
<xsl:value-of select="$Labels/Labels/AppointedAs"/>
</th>
</thead>
<tbody>
<xsl:apply-templates select="$PubDB/msa:PublisherDatabase/msa:Publishers/msa:Publisher[@Gender='Male']">
<xsl:sort select="msa:Name" data-type="text" order="ascending"/>
</xsl:apply-templates>
</tbody>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="msa:Publisher">
<tr>
<td>
<xsl:choose>
<xsl:when test="@Appointed='Elder'">
<xsl:value-of select="$Labels/Labels/Elder"/>
</xsl:when>
<xsl:when test="@Appointed='MinisterialServant'">
<xsl:value-of select="$Labels/Labels/MinisterialServant"/>
</xsl:when>
<xsl:when test="@Appointed='NotAppointed'">
<xsl:value-of select="$Labels/Labels/NotAppointed"/>
</xsl:when>
</xsl:choose>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
上面的XSL被剥离了。如您所见,@Appointed属性的值是MinisterialServant。然后它使用这个值在 XML 文件中链接的另一个节点中查找一个节点,以获取要显示的文本(即部长仆人)。
可以简化此 XSL 代码吗?我可以以某种方式直接使用@Appointed属性的值从 XML 文件中的另一个链接进行查找吗?
谢谢你。
<html>
<head>
<title>Publishers Report</title>
<link rel="stylesheet" type="text/css" href="Custom Publisher Report.css"/>
</head>
<body>
<table>
<thead>
<th class="cellVerticalHeading">
Appointed As
</th>
</thead>
<tbody>
<tr>
<td>
Ministerial servant
</td>
</tr>
</tbody>
</table>
</body>
</html>
如果我正确理解您的请求,您可以将第二个模板替换为:
<xsl:template match="msa:Publisher">
<tr>
<td>
<xsl:value-of select="$Labels/Labels/*[name()=current()/@Appointed]"/>
</td>
</tr>
</xsl:template>
此外,我相信您可以通过MSA_PublisherDatabase.XML
为转换制作源 XML 来大大简化问题。那么您的样式表可能如下所示:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msa="http://www.publictalksoftware.co.uk/msa"
exclude-result-prefixes="msa">
<xsl:output method="html"/>
<xsl:variable name="labels" select="document('LabelsInfo.xml')"/>
<xsl:template match="/msa:PublisherDatabase">
<html>
<head>
<!-- ... -->
</head>
<body>
<table>
<thead>
<!-- ??? -->
</thead>
<tbody>
<xsl:apply-templates select="msa:Publishers/msa:Publisher[@Gender='Male']">
<xsl:sort select="msa:Name" data-type="text" order="ascending"/>
</xsl:apply-templates>
</tbody>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="msa:Publisher">
<tr>
<td>
<xsl:value-of select="$labels/Labels/*[name()=current()/@Appointed]"/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句