0

入力.xml:

<comp>
  <link id="#c1-tbl-0001"/>
</comp>

output.xml:

<comp>
  <link newid="#c1-tbl-0001"/><tableno>1.1</tableno>
</comp>

tb1 の 1 や 0001 の別の 1 などの属性値から tableno の値が必要です。したがって、出力は 1.1 になります。

次の xsl を使用しましたが、正確な結果が得られません。

 <xsl:element name ="tableno">
  <xsl:value-of select ="substring(@id,7)"/>.<xsl:value-of select="substring(@id,12)"/>
</xsl:element>
4

3 に答える 3

0

入力に誤りがあります。「tb1」のように数字の 1 を入れるつもりだったところに、「tbl」に文字 l が入っているようです。

とにかく、これがあなたのやり方です...

入力ドキュメントが...

<comp>
  <link id="#c1-tbl-0001"/>
</comp>

...次にスタイルシートを適用します...

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/comp">
<comp>
  <link newid="#c1-tbl-0001"/>
  <tableno><xsl:value-of select="concat( substring(link/@id,7,1), '.')" />
           <xsl:number value="substring(link/@id,9)" /></tableno>
</comp>
</xsl:template>

</xsl:stylesheet>

...生産します...

<?xml version="1.0" encoding="utf-8"?>
<comp>
  <link newid="#c1-tbl-0001" />
  <tableno>1.1</tableno>
</comp>  

別のテンプレートの内容は次のようになります...

<comp>
  <link newid="#c1-tbl-0001"/>
  <tableno><xsl:value-of select="
   concat( substring(link/@id,7,1), '.', number( substring(link/@id,9))" />
  </tableno>
</comp>

書式設定を細かく制御できるため、使用する方が優れています。

于 2012-07-09T12:11:43.693 に答える
0

まず、読み取りたい属性の名前idは ではなくhrefです。(編集:これを修正したようです。)

最初の呼び出しに長さを指定して、substring1 桁のみをキャプチャする必要があります。

<xsl:value-of select="substring(@id, 7, 1)"/>.<xsl:value-of select="substring(@id, 12)"/>

2 番目の数字が複数の数字を使用している可能性があるが、ゼロを取り除きたい場合は、次のようにします。

<xsl:value-of select="substring(@id, 7, 1)"/>.<xsl:value-of select="number(substring(@id, 9))"/>
于 2012-07-09T11:37:36.710 に答える
0

ダッシュを含む文字列で区切られた 2 つの数字があることがわかっている場合の、より一般的な解決策:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="link">
     <xsl:value-of select=
     "translate(concat(substring-before(@id, '-'),
                     '.',
                        substring-after(@id, '-')
                     ),
                            translate(concat(substring-before(@id, '-'),
                                             '.',
                                             substring-after(@id, '-')
                                             ),
                                       '.123456789',
                                       ''
                                       ),
                      ''
                      )
     "/>
 </xsl:template>
</xsl:stylesheet>

この変換が提供された XML ドキュメントに適用されると、次のようになります。

<comp>
    <link id="#c1-tbl-0001"/>
</comp>

必要な正しい結果が生成されます。

1.1
于 2012-07-09T13:36:41.053 に答える