首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT 'key‘在'use’中应用表达式

XSLT 'key‘在'use’中应用表达式
EN

Stack Overflow用户
提问于 2012-12-27 10:36:19
回答 2查看 841关注 0票数 0

我有一个XML片段

代码语言:javascript
复制
    <node>
            <abc>part_1</abc>
    </node>
    <node>
            <abc>part_2</abc>
    </node>

如何忽略字符串"part_"并在xsl:keyuse属性中仅指定整数部分?具体来说,我在使用<key>use属性方面需要帮助。

我试过以下几点:

<key name="uniq-abc" match='abc' use='substring-after(., '_')/>

但这不管用。

以下是源XML:

代码语言:javascript
复制
    <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

代码语言:javascript
复制
    <objectFullName>network:138.120.242.60:ppp:interface-9/1/2.sts12_1:cp-Link</objectFullName>

下面是XSLT中试图提取它的部分。

代码语言:javascript
复制
    <xsl:key name="uniq-ips" match="objectFullName" use="substring-before(substring-after(., ':'), ':')"/>

下面是我使用密钥的方式:

代码语言:javascript
复制
    <xsl:apply-templates select="ppp.PppControlProtocol/objectFullName[generate-id() = generate-id(key('uniq-ips', .)[1])]"/>
    .
    .
    .
    <xsl:for-each select="key('uniq-ips', $currentIP)">
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-27 15:02:18

这里有一个问题,

,因为名为的键是这样定义的:

代码语言:javascript
复制
    <xsl:key name="uniq-ips" match="objectFullName" 
             use="substring-before(substring-after(., ':'), ':')"/>

您需要将上面的代码更正为:

代码语言:javascript
复制
 <xsl:apply-templates select=
   "ppp.PppControlProtocol/objectFullName
                 [generate-id() 
                = 
                  generate-id(key('uniq-ips', 
                                  substring-before(substring-after(., ':'), ':')
                                  )[1]
                             )
                 ]"/>
票数 2
EN

Stack Overflow用户

发布于 2012-12-27 11:19:09

以下几点应该足够:

代码语言:javascript
复制
<xsl:key name="k1" match="abc" use="substring-after(., '_')"/>

(当然,完整的样式表需要xmlns:xsl="http://www.w3.org/1999/XSL/Transform"的命名空间声明)。

如果您仍然有问题,那么我同意Thomas的观点,向我们展示XML输入、XSLT代码、所使用的XSLT处理器的详细信息,以及您得到的准确错误消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14053244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档