gpt4 book ai didi

xml - 从内部调用模板

转载 作者:数据小太阳 更新时间:2023-10-29 02:05:39 26 4
gpt4 key购买 nike

我有一个如下所示的 xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:nsm="http://192.137.81.132/deneme/sample.xsd"
exclude-result-prefixes="nsm">

<xsl:output method="text"/>
<xsl:param name="fieldOf">address</xsl:param>
<xsl:param name="inputId" select="concat($fieldOf,'/value')"/>

<xsl:variable name="vXpathExpression" select="concat('global/fieldset/field/', $inputId)"/>
<!-- these fields are from xml file-->

<xsl:template match="/">
<xsl:value-of select="$vXpathExpression"/>: <xsl:text/>
<xsl:for-each select="document('sample.xsd')/xs:schema/xs:complexType[@name='fieldtype']/xs:choice/child::*">

</xsl:for-each>

<xsl:call-template name="getNodeValue">
<xsl:with-param name="pExpression" select="$vXpathExpression" />
</xsl:call-template>
</xsl:template>

<xsl:template name="getNodeValue">
<xsl:param name="pExpression"/>
<xsl:param name="pCurrentNode" select="."/>

<xsl:choose>
<xsl:when test="not(contains($pExpression, '/'))">
<xsl:value-of select="$pCurrentNode/*[name()=$pExpression]"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="getNodeValue">
<xsl:with-param name="pExpression" select="substring-after($pExpression, '/')"/>
<xsl:with-param name="pCurrentNode" select="$pCurrentNode/*[name()=substring-before($pExpression, '/')]"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

在这种情况下它有效。但是当我从 for-each 内部调用模板时,我无法运行它。它什么也没给出,没有错误,没有值。有没有办法解决这个问题?谢谢

编辑:您可能想知道 for-each 是否有效。确实如此。我可以在 for-each 中获取属性。

最佳答案

问题在于:

<xsl:for-each select=
"document('sample.xsd')/xs:schema
/xs:complexType[@name='fieldtype']/xs:choice/child::*">

更改当前文档。

在当前文档不是源 XML 时尝试计算源 XML 的 XPath 表达式不会产生想要的结果,因为当前文档没有这样的命名元素。

解决方法很简单:

<xsl:variable name="vSourceDoc" select="/"/>

<xsl:for-each select=
"document('sample.xsd')/xs:schema
/xs:complexType[@name='fieldtype']/xs:choice/child::*">

<xsl:call-template name="getNodeValue">
<xsl:with-param name="pCurrentNode" select="$vSourceDoc" />
<xsl:with-param name="pExpression" select="$vXpathExpression" />
</xsl:call-template>
</xsl:for-each>

关于xml - 从内部调用模板 <xsl :for-each>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5231539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com