我有一个XML片段
<node>
<abc>part_1</abc>
</node>
<node>
<abc>part_2</abc>
</node>如何忽略字符串"part_"并在xsl:key的use属性中仅指定整数部分?具体来说,我在使用<key>的use属性方面需要帮助。
我试过以下几点:
<key name="uniq-abc" match='abc' use='substring-after(., '_')/>
但这不管用。
以下是源XML:
<ppp.PppControlProtocol>
<shelfId>1</shelfId>
<snmpPortId>841023490</snmpPortId>
<controlProtocolType>lCp</controlProtocolType>
<state>initial</state>
<lastClearedTime>0</lastClearedTime>
<restartCount>0</restartCount>
<deploymentState>0</deploymentState>
<objectFullName>network:138.120.242.60:ppp:interface-9/1/2.sts12_1:cp-Link</objectFullName>
<name>cp-Link</name>
</ppp.PppControlProtocol>我想使用以下值并提取IP部件138.120.242.60
<objectFullName>network:138.120.242.60:ppp:interface-9/1/2.sts12_1:cp-Link</objectFullName>下面是XSLT中试图提取它的部分。
<xsl:key name="uniq-ips" match="objectFullName" use="substring-before(substring-after(., ':'), ':')"/>下面是我使用密钥的方式:
<xsl:apply-templates select="ppp.PppControlProtocol/objectFullName[generate-id() = generate-id(key('uniq-ips', .)[1])]"/>
.
.
.
<xsl:for-each select="key('uniq-ips', $currentIP)">发布于 2012-12-27 15:02:18
这里有一个问题,
,因为名为的键是这样定义的:
<xsl:key name="uniq-ips" match="objectFullName"
use="substring-before(substring-after(., ':'), ':')"/>您需要将上面的代码更正为:
<xsl:apply-templates select=
"ppp.PppControlProtocol/objectFullName
[generate-id()
=
generate-id(key('uniq-ips',
substring-before(substring-after(., ':'), ':')
)[1]
)
]"/>发布于 2012-12-27 11:19:09
以下几点应该足够:
<xsl:key name="k1" match="abc" use="substring-after(., '_')"/>(当然,完整的样式表需要xmlns:xsl="http://www.w3.org/1999/XSL/Transform"的命名空间声明)。
如果您仍然有问题,那么我同意Thomas的观点,向我们展示XML输入、XSLT代码、所使用的XSLT处理器的详细信息,以及您得到的准确错误消息。
https://stackoverflow.com/questions/14053244
复制相似问题