xslt中的组函数

时间:2013-03-03 16:20:07

标签: xslt xpath xslt-2.0

我需要帮助解决XSLT中的一个小问题

我有一个XML: a.xsm

<?xml version="1.0" encoding="UTF-8"?>
<ExtData>
  <table bName="B SERs" id="BSER">
    <Col bName="Bus" id="BUS">
      <CoreCol coreEName="SER" coreHref="../_a2.xml" corebName="Bus" coreId="BUS"/>
    </Col>
    <Col bName="Bus" id="BUS">
      <CoreCol coreEName="MOR" coreHref="../_a5.xml" corebName="Busw" coreId="BUSW"/>
    </Col>
    <Col bName="Ser" id="NAME">
      <CoreCol coreEName="SER" coreHref="../_a2.xml" corebName="Ser" coreId="NAME"/>
    </Col>
    <Col bName="ID" id="ID">
      <CoreCol coreEName="SER" coreHref="../_a2.xml" corebName="SerId" coreId="UCMDB_ID"/>
    </Col>
  </table>
</ExtData>

我需要编写一个由coreName返回coreHref的函数 这意味着:: my_variable = same_func(“SER”)==&gt;&gt;变量将是“../_a2.xml”

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

这是选择coreHref:

的XPath表达式
//Col/CoreCol[@coreEName='YorName']/data(@coreHref)

答案 1 :(得分:0)

定义一个键

<xsl:key name="by-name" match="Col/CoreCol" use="@coreEName"/>

然后将其用于例如key('by-name', 'SER')/@coreHref

但请注意,在xsl:function内部,您没有上下文节点来应用具有两个参数的键函数,因此如果您想在xsl:function内部使用该方法,请确保您拥有

<xsl:variable name="main-root" select="/"/>

作为全局变量,然后使用key('by-name', 'SER', $main-root)/@coreHref