0

XMLフラグメントがあります

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

文字列を無視して、整数部分のみの属性で"part_"指定するにはどうすればよいですか?具体的には、の属性の使用についてサポートが必要です。usexsl:key<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)">
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 に答える