如何使用RegEx使用样式表删除XML中的空格

时间:2016-01-21 03:21:22

标签: regex xml xslt

我有一个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>

2 个答案:

答案 0 :(得分:1)

您可以在匹配

中使用以下RegEx
(\<FirstName\>.*?-)\s+

并将其替换为第一个捕获的组$1

RegEx (\<FirstName\>.*?-)\s+匹配,

  1. \<FirstName\>.*?-:文字<FirstName>后跟任何非贪婪的字符,直到找到第一个连字符。此匹配将添加到捕获的组中。
  2. \s+:匹配一个或多个空格字符。
  3. 将其替换为$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>