我正在用 XSL 解析一个 XSL 文件。而且我在动态查找其中的节点时遇到问题。这是场景:
<linkbase xmlns="http://www.xbrl.org/2003/linkbase"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.xbrl.org/2003/linkbase http://www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd">
<labelLink xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:role="http://www.xbrl.org/2003/role/link"
xlink:type="extended">
<loc xlink:type="locator"
xlink:href="de-gaap-ci-2010-12-16.xsd#de-gaap-ci_bs.ass.fixAss.fin.otherLoans.other"
xlink:label="de-gaap-ci_bs.ass.fixAss.fin.otherLoans.other"/>
<!-- many <loc... elements -->
<labelArc xlink:from="de-gaap-ci_bs.ass.fixAss.fin.otherLoans.other"
xlink:to="label_de-gaap-ci_bs.ass.fixAss.fin.otherLoans.other"
priority="1"
xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label"
xlink:type="arc"/>
<!-- many <labelArc... elements -->
</labelLink>
</linkbase>
我正在解析labelArc
元素并希望包含来自loc
元素的信息。这是通过 SAP/ABAP 完成的...
我的 XSL 代码如下所示:
<xsl:stylesheet version="1.0"
xmlns:lb="http://www.xbrl.org/2003/linkbase"
xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:template match="lb:labelArc">
<xsl:variable name="arc_to" select="@xlink:to"/>
<TY_T_LABELARC>
<LOC> <xsl:value-of select="//lb:loc[@xlink:label='$arc_to']/@xlink:href"/> </LOC>
<FROM> <xsl:value-of select="@xlink:from"/> </FROM>
<TO> <xsl:value-of select="@xlink:to"/> </TO>
<!-- Other values follow -->
</TY_T_LABELARC>
</xsl:template>
我期待这个结果:
<TY_T_LABELARC>
<LOC>de-gaap-ci-2010-12-16.xsd#de-gaap-ci_bs.ass.fixAss.fin.otherLoans.other</LOC>
<FROM>de-gaap-ci_bs.ass.fixAss.fin.otherLoans.other</FROM>
<TO>label_de-gaap-ci_bs.ass.fixAss.fin.otherLoans.other</TO>
</TY_T_LABELARC>
LOC
我的问题是,除了具有空值(<LOC/>
)的元素之外,一切都很好。
这意味着这个 xpath 表达式返回一个空值:
<xsl:value-of select="//lb:loc[@label='$arc_to']/@href"/>
该语句的目标是href
从元素中获取属性loc
。我可以找到每个标签loc
的值对应的标签。@to
labelArc
我在每个属性上都使用前导命名空间“xlink:”尝试了它,没有它......
有任何想法吗?