首页 > 解决方案 > XSLT - 从 foreach 内 xml 的其他部分查找值

问题描述

我有以下 XML。

<?xml version="1.0" ?>
<Root xmlns="http://1.local/1.xsd">
    <Definitions>
        <FileTypes>
            <FileType ID="1" Name="FileType1"/>
            <FileType ID="2" Name="FileType2"/>
            <!--... - lots of file types-->
        <FileTypes>
    </Definitions>
    <Files>
        <File Name="File1" FileTypeID="1" />
        <File Name="File2" FileTypeID="1" />
        <File Name="File3" FileTypeID="2" />
        <!--... - lots of files-->
    <Files>
</Root>

对于每个文件,我需要获取其 Name 属性并为其 FileTypeID 查找相应的文件类型名称

因此示例输出为: 文件名:File1 文件类型:FileType1

文件名:File2 文件类型:FileType1

文件名:File3 文件类型:FileType2

这是我目前拥有的 XSLT,但我不确定如何查找文件类型的名称。

<?xml version="1.0"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:l="http://1.local/1.xsd"
  exclude-result-prefixes="l"
  version="1.0">
  <xsl:output method="text" omit-xml-declaration="yes" media-type="text/plain" />

  <xsl:template match="/">
    <xsl:apply-templates select="l:Root/l:Files" />
  </xsl:template>

  <xsl:template match="l:Root/l:Files">
    Why
    <xsl:for-each select="l:File">
          File name: <xsl:value-of select="@Name">
          File type:
      </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

标签: xslt

解决方案


如果您想使用 XSLT,您需要从了解其表达式语言 XPath 来导航 XML 树开始,您可以选择//l:FileType[@ID = current()/@FileTypeID]/@Name. 或者在 XSLT 中,正如 Tim 已经发布的那样,您可以使用键来有效地实现查找。


推荐阅读