根据当前节点中特定属性的值,从链接的XML文件中选择文本
我有一个XML数据文件,其中包含以下描述(XML文件1):根据当前节点中特定属性的值,从链接的XML文件中选择文本,xml,xslt-1.0,Xml,Xslt 1.0,我有一个XML数据文件,其中包含以下描述(XML文件1): 任命为 长者 部下 未任命 我还有另一个XML数据库文件,其中包含关于发布者的详细信息。下面是一个简单的示例来说明当前的问题(XML文件2): 伯蓝恩·伍德 现在,您可以在XML文件2中看到指定的属性了吗?值在XML文件1中重复,该文件依次包含适当的描述 为了完成我需要的工作,我目前正在使用以下XSL脚本: <?xml version="1.0" encoding="UTF-8"?> <xsl:styleshe
任命为
长者
部下
未任命
我还有另一个XML数据库文件,其中包含关于发布者的详细信息。下面是一个简单的示例来说明当前的问题(XML文件2):
伯蓝恩·伍德
现在,您可以在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已精简。如您所见,@committed属性的值为MinisterialServant。然后,它使用此值在另一个链接的XML文件中查找节点,以获取要显示的文本(即节点)
这个XSL代码可以简化吗?我是否可以直接从另一个链接的XML文件中使用@appoint属性的值
多谢各位
预期产量
出版商报告
任命为
部下
如果我正确理解您的请求,您可以将第二个模板替换为:
<xsl:template match="msa:Publisher">
<tr>
<td>
<xsl:value-of select="$Labels/Labels/*[name()=current()/@Appointed]"/>
</td>
</tr>
</xsl:template>
请回顾:和.@michael.hor257k请参阅修订后的问题。请添加转换给定示例的预期输出。@michael.hor257k完成。这很有效。酷。我不能让你的第二个想法发挥作用,但我想我知道为什么它失败了。我不会用理由来回答这个问题。我提出了另一个问题(),因为我使用
XmlSerializer
我需要扩展它,以便有选择地指定样式表
,这样我就可以正确地查看发布者数据库,而无需链接它。但我发现的答案与我已经使用的代码相冲突。但这是另一个问题。
<?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>
<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>
<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>