xslt - 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,您需要从了解其表达式语言 XPath 来导航 XML 树开始,您可以选择//l:FileType[@ID = current()/@FileTypeID]/@Name
. 或者在 XSLT 中,正如 Tim 已经发布的那样,您可以使用键来有效地实现查找。
推荐阅读
- php - 在 symfony 上构建表单,属性不存在
- css - 为什么 BOM 出现在我的 SASS 编译的 CSS 的每一行上?
- php - 使用主管的 Laravel 5.8 异步队列问题
- spring - 有没有办法将 Micrometer @Timed 注释捕获到 Prometheus 指标存储/注册表中?
- spring-boot - 使用 spring-boot-starter-oauth2-client 检索 OAuth2 3-legged 身份验证的访问令牌
- javascript - 表格提交后的通知
- reactjs - 函数声明与 lambda(反应?)
- javascript - this.ref.getBoundingClientRect 的笑话覆盖率
- javascript - 谷歌图表:如何在不同的图表上同步缩放
- r - 如何在 R 中安装 pivot_long() 和 pivot_wide()