0

我有一个 XML 片段

    <node>
            <abc>part_1</abc>
    </node>
    <node>
            <abc>part_2</abc>
    </node>

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

我试过以下:

<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)">
4

2 回答 2

2

这里有一个问题

<xsl:apply-templates select=
  "ppp.PppControlProtocol/objectFullName
                [generate-id() 
               = 
                 generate-id(key('uniq-ips', .)[1])
                ]"/>

因为命名的键'uniq-ips'是这样定义的:

    <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-27T15:02:18.910 回答
0

以下应该足够了:

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

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

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

于 2012-12-27T11:19:09.700 回答