我需要帮助解决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”
感谢您的帮助!
答案 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
。