根据当前节点中特定属性的值,从链接的XML文件中选择文本

根据当前节点中特定属性的值,从链接的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文件1):


任命为
长者
部下
未任命
我还有另一个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>