【问题标题】:Call value from another node xslt从另一个节点 xslt 调用值
【发布时间】:2019-01-28 20:33:54
【问题描述】:

我需要一些技巧来完成解决方案,想象一下(编辑 XML 仅用于展示建议):

<root>
<header>
  <Document>
      ... many tags
  <Document>
  <extension>
     <flag>X</flag>
  </extension>
</header>
<body> 
   <List> 
      <Object>
         ... many tags
        <extension>
         ... many tags
        </extension>
      </Object>
      <Event>
         ... many tags
        <extension>
          ... many tags
        </extension>
      </Event>
   </List>
</body>

我有这个 XSLT:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:strip-space elements="*" />

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>

<xsl:template match="Event">
    <xsl:copy>
        <xsl:apply-templates />
                <xsl:if test="header/extension[flag = 
                  'X']">
                DO SOMETHING
                </if>
    </xsl:copy>
</xsl:template>

<xsl:template match="//Object" />

程序必须做的是如果(来自 (header) 的标记 (flag) 包含 X)在模板 match=Event 内做某事。

我已经尝试过:header/extension[flag ='X'] and ../extension/flag = 'X' and header/extension/flag = 'X'

它不能正常工作。

亲切的问候,

【问题讨论】:

    标签: xml xslt transform transformation


    【解决方案1】:

    您当前的表达式相对于当前的Event 节点,而header 不是EventNode 的子节点。

    您需要使表达式相对于“文档”节点,因此它实际上是一个绝对路径

    <xsl:if test="/root/header/extension[flag = 'X']">
    

    (显然您需要更正您的 XSLT,因为您当前有一个结束 &lt;/if&gt; 标记,而不是 &lt;xsl:if&gt;

    您可以考虑将结果存储在全局可用的变量中,而不是为每个 Event 评估相同的路径

     <xsl:variable name="extension" select="/root/header/extension[flag = 'X']" />
    

    那么你就可以这样做了……

    <xsl:if test="$extension">
    

    【讨论】:

    • 现在我明白我做错了什么。但是 [ ] 是什么意思,我想我不能使全局变量,因为这个 可以包含其他值,X 只是示例,但我在这里做了 poc 并且可以工作。谢谢你的提示 ! ;)
    • 你可以定义变量&lt;xsl:variable name="extension" select="/root/header/extension/flag" /&gt;,然后你的if语句可以是&lt;xsl:if test="$extension = 'X' or $extension = 'Y'" /&gt;。或者在 XSLT 2.0 中你可以这样做 &lt;xsl:if test="$extension=('X', 'Y')" /&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    相关资源
    最近更新 更多