Умный поиск и замена XSl - PullRequest
       1

Умный поиск и замена XSl

1 голос
/ 15 октября 2010

Можно ли найти и заменить атрибуты элемента xml?Я хочу изменить каталог, на который указывает ссылка:

С:

<image href="./views/screenshots/page1.png">

на

<image href="screenshots/page1.png"> 

И с:

<image href="./screenshots/page2.png">

до

<image href="screenshots/page2.png">

Таким образом, избавляясь от всех "./", которые принадлежат href всех тегов изображения, но только тегов изображения.А кроме того, избавьтесь от первой папки, если она не называется «скриншоты».Есть ли простой способ сделать это за один раз?

1 Ответ

1 голос
/ 15 октября 2010

Это преобразование:

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

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

 <xsl:template match="image/@href[starts-with(.,'./screenshots/')]">
  <xsl:attribute name="href">
   <xsl:value-of select="substring(.,3)"/>
  </xsl:attribute>
 </xsl:template>

  <xsl:template match=
   "image/@href
     [starts-with(.,'./')
     and not(starts-with(substring(.,3), 'screenshots/'))
     ]">
  <xsl:attribute name="href">
   <xsl:value-of select="substring-after(substring(.,3),'/')"/>
  </xsl:attribute>
 </xsl:template>


 <xsl:template priority="10"
      match="image/@href[starts-with(.,'./views/')]">
  <xsl:attribute name="href">
   <xsl:value-of select="substring(.,9)"/>
  </xsl:attribute>
 </xsl:template>
</xsl:stylesheet>

при применении к этому документу XML :

   <t>
    <image href="./views/screenshots/page1.png"/>
    <image href="./screenshots/page2.png"/>
    <load href="./xxx.yyy"/>
    <image href="ZZZ/screenshots/page1.png"/>
   </t>

дает желаемый результат :

<t>
    <image href="screenshots/page1.png"/>
    <image href="screenshots/page2.png"/>
    <load href="./xxx.yyy"/>
    <image href="ZZZ/screenshots/page1.png"/>
</t>

Примечание :

  1. Использование и переопределение правила идентификации . Это самый фундаментальный и самый мощный шаблон проектирования XSLT.

  2. Только href атрибуты image элементов изменены .

  3. Только атрибуты href, начинающиеся со строки "./" или строки "./{something-different-than-screenshots}/", обрабатываются специальным образом (отдельными шаблонами).

  4. Все остальные узлы обрабатываются только шаблоном идентификации .

  5. Это чистое решение "push-style" .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...