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

安德鲁·特拉克尔

我有这个 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>
michael.hor257k

如果我正确理解您的请求,您可以将第二个模板替换为:

<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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用R从xml文件中选择特定文本

来自分类Dev

VB6在XML的节点中选择文本

来自分类Dev

如何根据同一节点中不同属性值的匹配来查找和更新 XML 文档中的节点属性值?

来自分类Dev

XML-XSL以从特定节点中选择并水平输出

来自分类Dev

LINQ to XML选择特定节点中的元素

来自分类Dev

如何选择特定的 XML 节点并获取其子节点中的值

来自分类Dev

在Java单位文本中比较Xml,忽略节点中的属性

来自分类Dev

根据XML中的条件从父节点中删除子节点

来自分类Dev

更改XML文件中的节点和属性文本

来自分类Dev

根据同级节点的值选择XML节点

来自分类Dev

从Oracle中重复的节点中提取特定的xml节点

来自分类Dev

从xpath中的多个子节点中选择文本

来自分类Dev

如何从包含xml字符串的文本列中选择特定值?

来自分类Dev

如何从包含xml字符串的文本列中选择特定值?

来自分类Dev

在Coldfusion中选择具有特定xmlText和属性值的xml节点

来自分类Dev

在Coldfusion中选择具有特定xmlText和属性值的xml节点

来自分类Dev

从文本文件中选择特定文本,BASH脚本

来自分类Dev

从Powershell中的xml节点中删除内部文本

来自分类Dev

XML搜索-快速,节点内文本或文本作为属性值

来自分类Dev

xml Linq to XML的根节点中的属性值

来自分类Dev

Openrefine:根据子节点值选择 XML

来自分类Dev

根据某些文本/值从Selenium中的表中选择行

来自分类Dev

仅链接节点中的特定文本

来自分类Dev

根据xml文件中的标记文本创建字典(python)

来自分类Dev

XML-根据内部文本选择xmlNode

来自分类Dev

XML:按值而不是属性选择节点

来自分类Dev

在xml中选择属性

来自分类Dev

在节点中编辑xml属性

来自分类Dev

从文本文件中选择特定行,并将该行溢出到数组中

Related 相关文章

  1. 1

    使用R从xml文件中选择特定文本

  2. 2

    VB6在XML的节点中选择文本

  3. 3

    如何根据同一节点中不同属性值的匹配来查找和更新 XML 文档中的节点属性值?

  4. 4

    XML-XSL以从特定节点中选择并水平输出

  5. 5

    LINQ to XML选择特定节点中的元素

  6. 6

    如何选择特定的 XML 节点并获取其子节点中的值

  7. 7

    在Java单位文本中比较Xml,忽略节点中的属性

  8. 8

    根据XML中的条件从父节点中删除子节点

  9. 9

    更改XML文件中的节点和属性文本

  10. 10

    根据同级节点的值选择XML节点

  11. 11

    从Oracle中重复的节点中提取特定的xml节点

  12. 12

    从xpath中的多个子节点中选择文本

  13. 13

    如何从包含xml字符串的文本列中选择特定值?

  14. 14

    如何从包含xml字符串的文本列中选择特定值?

  15. 15

    在Coldfusion中选择具有特定xmlText和属性值的xml节点

  16. 16

    在Coldfusion中选择具有特定xmlText和属性值的xml节点

  17. 17

    从文本文件中选择特定文本,BASH脚本

  18. 18

    从Powershell中的xml节点中删除内部文本

  19. 19

    XML搜索-快速,节点内文本或文本作为属性值

  20. 20

    xml Linq to XML的根节点中的属性值

  21. 21

    Openrefine:根据子节点值选择 XML

  22. 22

    根据某些文本/值从Selenium中的表中选择行

  23. 23

    仅链接节点中的特定文本

  24. 24

    根据xml文件中的标记文本创建字典(python)

  25. 25

    XML-根据内部文本选择xmlNode

  26. 26

    XML:按值而不是属性选择节点

  27. 27

    在xml中选择属性

  28. 28

    在节点中编辑xml属性

  29. 29

    从文本文件中选择特定行,并将该行溢出到数组中

热门标签

归档