在xslt上用另一个替换提取的字符串内容

时间:2015-05-13 08:40:06

标签: xml xslt

你好我想用另一个替换一些提取的字符串的内容(来自之前的atrribute)。 当我在此标记中提取属性时:

<UML:Package href='file.xml|638020a_1071071492996_282832_1598'>

使用此xsl代码:

<package href="{UML:StructuralFeature.type/UML:Classifier/@href}" />

我得到的话:

<package href='file.xml|638020a_1071071492996_282832_1598' />

但我想得到:

<package href='file.uml#638020a_1071071492996_282832_1598' />

任何帮助?

2 个答案:

答案 0 :(得分:1)

假设XSLT 1.0,我会这样做:

<package>
    <xsl:attribute name="href">
        <xsl:variable name="href" select="UML:StructuralFeature.type/UML:Classifier/@href" />
        <xsl:value-of select="substring-before($href, '.xml|')"/>
        <xsl:text>.uml#</xsl:text>
        <xsl:value-of select="substring-after($href, '.xml|')"/>
    </xsl:attribute>
</package>

如果需要,可以使用concat()函数将其重写为属性值模板。

注意:您的XSLT会选择UML:StructuralFeature.type/UML:Classifier/@href,但您的XML代码段会显示名为UML:Package的元素。这不适合。

答案 1 :(得分:0)

使用fn:replace()功能:

<xsl:value-of select="fn:replace(/UML:StructuralFeature.type/UML:Classifier/@href, '.xml|', '.uml#')" />

(如果需要,更正xpath,你必须使用xslt 2.0)

其他字符串函数herehere