0

输入.xml:

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

输出.xml:

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

我需要属性值中 tableno 的值,例如 tb1 中的 1 和 0001 中的另一个 1。所以输出应该是 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

首先,您要读取的属性是 named id,而不是href。(编辑:你似乎已经纠正了这一点。)

您必须给第一个substring电话一个长度,以便它只捕获一个数字:

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

如果第二个数字可能使用多个数字,但您想去除零,您可以

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

您的输入有错误。看起来你在“tbl”中有一个字母 l,你的意思是放一个数字 1,如“tb1”。

无论如何,这就是你如何做到的......

如果您的输入文档是...

<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

如果我们只知道有两个数字由包含破折号的字符串分隔,则更通用的解决方案:

<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 回答