我有这个XML数据文件,其中包含以下描述( XML文件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 中看到指定的属性吗?在 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 被删除。如您所见, @Appased 属性的值为 MinisterialServant 。然后,它使用此值在XML文件中的另一个链接中查找节点以获取要显示的文本(部长级服务员)。
这个XSL代码可以简化吗?我可以以某种方式直接使用XML文件中其他链接的查找中 @Appased 属性的值吗?
谢谢。
<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>
答案 0 :(得分:1)
如果我理解您的请求,您可以将第二个模板替换为:
<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>