查找并用新标签替换打开和关闭标签

Find and replace both open and close tag with new tags

我在 div 上有一堆重复的代码,我想用另一个标签替换它们。

<div class="form-group" ng-show="!loadingText">
   <label>Status</label>
   <div class="form-control" ng-if="request.RequestStatus">
      {{ request.RequestStatus }}
   </div>
</div>  

在站点外替换与 <div class="form-group" ng-show="!loadingText"> 匹配的开始和结束 div 标签,同时保留标签之间的内容的好方法是什么?

我想要做的替换将导致以下结果:

<fg>
   <label>Status</label>
   <div class="form-control" ng-if="request.RequestStatus">
      {{ request.RequestStatus }}
   </div>
</fg>   

由于您的输入符合 XML,这在 XSLT 中很简单。

<div class="form-group" ng-show="!loadingText">
   <label>Status</label>
   <div class="form-control" ng-if="request.RequestStatus">
      {{ request.RequestStatus }}
   </div>
</div> 

通过此 XSLT 1.0 转换时

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes" />

    <!-- identity template: copies everything that fits no other template -->    
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- specific <div> nodes will replaced by <fg> -->
    <xsl:template match="div[@class='form-group' and @ng-show='!loadingText']">
        <fg>
            <xsl:apply-templates select="*"/>
        </fg>
    </xsl:template>
</xsl:transform>

变成

<fg>
   <label>Status</label>
   <div class="form-control" ng-if="request.RequestStatus">
      {{ request.RequestStatus }}
   </div>
</fg>

xsltproc 等命令行工具可以轻松完成这项工作。