我有一个XML,我正在寻找特定的标签(在本例中为“FirstName”),并且只有在空格之前有一个 - 字符时才删除值中的空格。
换句话说,如果没有空格,我想保留空格。我想使用带有RegEx匹配和替换功能的XSL样式表来完成此操作。
预期结果是Sam-Louise,删除了“Sam-”和“Louise”之间的空间
<?xml version="1.0" encoding="utf-8"?>
<NCV Version="1.14">
<Invoice>
<customer>
<customerId>12785</customerId>
<FirstName>Sam- Louise</FirstName>
<LastName>Jones</LastName>
</customer>
</Invoice>
</NCV>
答案 0 :(得分:1)
您可以在匹配
中使用以下RegEx(\<FirstName\>.*?-)\s+
并将其替换为第一个捕获的组$1
RegEx (\<FirstName\>.*?-)\s+
匹配,
\<FirstName\>.*?-
:文字<FirstName>
后跟任何非贪婪的字符,直到找到第一个连字符。此匹配将添加到捕获的组中。\s+
:匹配一个或多个空格字符。将其替换为$1
,将删除连字符后的空格。
答案 1 :(得分:1)
这是一个可能的XSLT:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="FirstName">
<FirstName>
<xsl:value-of select="replace(., '-\s+', '-')"/>
</FirstName>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:transform>
<强> xsltransform.net demo
强>
输出
<NCV Version="1.14">
<Invoice>
<customer>
<customerId>12785</customerId>
<FirstName>Sam-Louise</FirstName>
<LastName>Jones</LastName>
</customer>
</Invoice>
</NCV>