我有一个传入的XML文档。我只需要在下面的传入XML文档中修改一个元素示例<ID>
元素的值。我基本上需要检查名为<ID>
的元素,如果该值没有任何连字符,它将采用连字符( - )然后我需要取连字符前的值( - )ex- 4314141
传入的XML文档:
<Message>
<ID>4314141-324234</ID>
<EMAIL>abc</EMAIL>
</Message>
我在XSL下面使用这个来做这个但是它没有按预期工作。 XSL:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dp="http://www.datapower.com/extensions"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
extension-element-prefixes="dp"
exclude-result-prefixes="dp" >
<xsl:variable name="uuid" select="dp:variable('var://context/txn/uuid')" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/ID">
<xsl:copy>
<ID><xsl:value-of select="substring-before($ID, ' -')" /></ID>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="ID"/>
</xsl:stylesheet>
让我知道如何做到这一点。
答案 0 :(得分:1)
没有任何连字符,它将采取
这将执行您的身份复制模板。
如果值包含连字符( - ),那么我需要取连字符前的值( - )
<xsl:template match="ID[contains(., '-')]">
<xsl:copy>
<xsl:value-of select="substring-before(., '-')" />
</xsl:copy>
</xsl:template>
友情提示:请注意匹配模式中的/
。
答案 1 :(得分:0)
只需使用此模板覆盖身份规则:
<xsl:template match="ID/text()[contains(., '-')]">
<xsl:value-of select="substring-before(., '-')"/>
</xsl:template>
以下是完整转型:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ID/text()[contains(., '-')]">
<xsl:value-of select="substring-before(., '-')"/>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档:
<Message>
<ID>4314141-324234</ID>
<EMAIL>abc</EMAIL>
</Message>
产生了想要的正确结果:
<Message>
<ID>4314141</ID>
<EMAIL>abc</EMAIL>
</Message>