我有一个xml文档,其中包含一个包含正确名称的节点,然后是一个破折号( - ),后跟一个描述。我想只显示正确的名称。
<productroot>
<name>Proper name - lots of text not relevant to my display.</name>
</productroot>
由于
答案 0 :(得分:0)
假设name
元素是当前节点:
normalize-space(substring-before(., '-'))
答案 1 :(得分:0)
这是一个完整的解决方案:
<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=
"name/text()[contains(., ' -')]">
<xsl:value-of select="substring-before(., ' -')"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于下面的XML文档:
<productroot>
<name>Proper name1 - Irrelevant 1</name>
<name>Proper name2 - Irrelevant 2</name>
<name>Proper name3 - Irrelevant 3</name>
<name>Proper name4 - Irrelevant 4</name>
<name>Proper name5 - Irrelevant 5</name>
</productroot>
产生了想要的正确结果:
<productroot>
<name>Proper name1</name>
<name>Proper name2</name>
<name>Proper name3</name>
<name>Proper name4</name>
<name>Proper name5</name>
</productroot>
解释:
覆盖identity rule 。
使用标准XPath函数contains()
和substring-before()
。
答案 2 :(得分:0)
这是使用tokenize()
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="name/text()">
<xsl:value-of select="normalize-space(tokenize(.,'-')[1])"/>
</xsl:template>
</xsl:stylesheet>