从另一个节点 xslt 调用值
Call value from another node xslt
我需要一些提示来完成解决方案,想象下面的(编辑 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" />
程序必须做的是 IF(来自(header)的标签(flag)包含 X)在模板 match=Event 中做一些事情。
我已经尝试过:header/extension[flag ='X'] and ../extension/flag = 'X' and header/extension/flag = 'X'
无法正常工作。
亲切的问候,
您当前的表达式是相对于当前 Event
节点的,并且 header
不是 EventNode
的子节点。
您需要使表达式相对于 "document" 节点,因此实际上它是一个绝对路径
<xsl:if test="/root/header/extension[flag = 'X']">
(显然您需要更正您的 XSLT,因为您当前有一个结束标记 </if>
,而不是 <xsl:if>
)
不过,与其为每个 Event
计算相同的路径,不如考虑将结果存储在全局可用的变量中
<xsl:variable name="extension" select="/root/header/extension[flag = 'X']" />
那你就可以这样做了...
<xsl:if test="$extension">
我需要一些提示来完成解决方案,想象下面的(编辑 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" />
程序必须做的是 IF(来自(header)的标签(flag)包含 X)在模板 match=Event 中做一些事情。
我已经尝试过:header/extension[flag ='X'] and ../extension/flag = 'X' and header/extension/flag = 'X'
无法正常工作。
亲切的问候,
您当前的表达式是相对于当前 Event
节点的,并且 header
不是 EventNode
的子节点。
您需要使表达式相对于 "document" 节点,因此实际上它是一个绝对路径
<xsl:if test="/root/header/extension[flag = 'X']">
(显然您需要更正您的 XSLT,因为您当前有一个结束标记 </if>
,而不是 <xsl:if>
)
不过,与其为每个 Event
计算相同的路径,不如考虑将结果存储在全局可用的变量中
<xsl:variable name="extension" select="/root/header/extension[flag = 'X']" />
那你就可以这样做了...
<xsl:if test="$extension">