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

时间:2015-09-20 13:58:45

标签: xml xhtml text-editor

我在网站上有一堆重复的代码,我想用另一个标签代替。

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

在网站上更换匹配div的开始和结束<div class="form-group" ng-show="!loadingText">标记,同时保留标记之间的内容时,有什么好方法?

我期待的替代品将产生以下结果:

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

1 个答案:

答案 0 :(得分:1)

由于您的输入符合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等命令行工具可以轻松完成工作。