基于另一个变量的 XSLT 元素选择

Posted

技术标签:

【中文标题】基于另一个变量的 XSLT 元素选择【英文标题】:XSLT element selection based on another variable 【发布时间】:2021-09-21 15:06:00 【问题描述】:

XSLT 新手,我正在尝试使用下面的 xsl 文件,我想在该文件中选择基于同一 XSL 中另一个变量的特定代码。使用 Saxon-He-10.5 版本的 jar。有人可以帮我完成这个 xsl 转换。我想在 output.xml 中打印所选代码的标题

<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xpath-default-namespace="http://test.org/test"
  xmlns:fn="http://www.w3.org/2005/xpath-functions" 
  xmlns:lookup="http://lookup.data"
  exclude-result-prefixes="fn lookup xsl xsi">

<xsl:variable name="key1" select="&quot;status1&quot;"/>
  <xsl:output omit-xml-declaration="yes" method="xml"/>
  <xsl:variable name="header">
    <sections>
      <code key="status1" code="123" title="STATUS1"/>
      <code key="status2" code="456" title="STATUS2"/>  
    </sections>
  </xsl:variable>

  <xsl:variable name="data" select="$header/sections/code[@key=&quot;status1&quot;]" />
  <xsl:variable name="data1" select="$header/sections/code[@key=$key1]" />
  
  <xsl:template match="/">
        :<xsl:value-of select="$header" />:
        :<xsl:value-of select="$data" />:
        :<xsl:value-of select="$data/@title" />:
        :<xsl:value-of select="$data1/@title" />:
  </xsl:template>
     
</xsl:transform>

使用命令提示符尝试转换如下:

java -cp saxon-he-10.5.jar net.sf.saxon.Transform Response.xml test.xsl > output.xml

【问题讨论】:

它不依赖于 XML 文件,所以没有提到相同的。所需的输出 xml 我想要它的简单标题文本。 【参考方案1】:

设置xpath-default-namespace 会使您的代码失败。如果你真的需要你拥有的全局声明,那么你需要在本地覆盖它,如&lt;xsl:variable name="data" select="$header/sections/code[@key=&amp;quot;status1&amp;quot;]" xpath-default-namespace=""/&gt;

【讨论】:

以上是关于基于另一个变量的 XSLT 元素选择的主要内容,如果未能解决你的问题,请参考以下文章

Xslt根据条件规则引用另一个元素来更改元素值

XSLT:如何将一个元素解析为多个变量

XSLT:测试当前元素是不是匹配变量 xpath

XSLT 中的条件变量选择

使用 XSLT 选择最后一个子元素

如何使用 XSLT 在 xml 文件中查找元素并将其放置在另一个标记中?