Совпадение нескольких значений атрибута в html для ant buildscript - PullRequest
0 голосов
/ 24 июля 2011

Я хочу сопоставить несколько значений атрибута для замены. например

<div class="div h1 full-width"></div>

Должен производить div, h1 и full-width как отдельные совпадения. Я хочу сделать это, чтобы префикс классов. Поэтому вместо div h1 full-width это должно быть pre-div pre-h1 pre-full-width

Регулярное выражение, которое у меня есть, это

(?<=class=["'])(\b-?[_a-zA-Z]+[_a-zA-Z0-9-]*\b)+

Это соответствует только первому классу. Это не совсем понятно, потому что это единственное, что должно соответствовать этому шаблону :( Я пытался заставить взгляд за пределы взять больше, чем просто class = ", но я просто заканчиваю тем, что брал все и ничего не оставлял для замены. Я хочу сделать шаблон, который соответствует любому значению индивидуально между кавычками атрибута класса.

Я хочу сделать это для сценария сборки Ant, который обрабатывает все файлы и заменяет class = "value1 value2 value3" установленным префиксом. Я сделал это без особых проблем с заменой классов в CSS-файлах, но у вас html, кажется, немного сложнее.

Это сборочный скрипт Ant. Java regexp package используется для обработки шаблона. Используется тег ant: replaceregexp

Муравьиная реализация приведенного выше шаблона:

<target name="prefix-class" depends="">
  <replaceregexp flags="g">
    <regexp  pattern="(?&lt;=class=['&quot;])(\b-?[_a-zA-Z]+[_a-zA-Z0-9-]*\b)+"/>
    <substitution expression=".${prefix}\1"/>
    <fileset dir="${dest}"/>
   </replaceregexp>
</target>    

Ответы [ 2 ]

0 голосов
/ 27 июля 2011

Отказался от Ants ReplaceRegExp и решил мою проблему с XSLT для преобразования xhtml в xhtml

Следующий код добавляет префикс ко всем значениям атрибута класса элементов.исходный документ xhtml должен быть правильно отформатирован для анализа.

<xsl:stylesheet version="2.0"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xhtml xsl xs">

  <xsl:output method="xml" version="1.0" encoding="UTF-8" 
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1.dtd" 
    indent="yes" omit-xml-declaration="yes"/>

  <xsl:param name="prefix" select="'oo-'"/>

  <xsl:template match="/">
    <xsl:apply-templates select="./@*|./node()" />
  </xsl:template>

  <!--remove these atts from output, default xhtml values from dtd -->
  <xsl:template match="xhtml:a/@shape"/>
  <xsl:template match="@rowspan"/>
  <xsl:template match="@colspan"/>

  <xsl:template match="@class">
    <xsl:variable name="replace_regex">
      <xsl:value-of select="$prefix"/>
      <xsl:text>$1</xsl:text>
    </xsl:variable>
    <xsl:attribute name="class">
      <xsl:value-of select="fn:replace( . , '(\w+)' , $replace_regex )"/>
    </xsl:attribute>
  </xsl:template>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
0 голосов
/ 26 июля 2011

Я не думаю, что вы можете найти n (или в вашем случае 3) разных записей классов и заменить их одним простым регулярным выражением.Если вам нужно сделать это в муравье, я думаю, что вы должны написать свою собственную задачу муравья.Лучше всего было бы xslt, вы знакомы с xslt?

...