Как сгенерировать xml с подменой данных в определенных тегах?

Суть задачи: есть исходных xml файл в котором требуется подменить ссылки, заключенные в тег url на свои.

например у нас есть offers -> offer -> url

со значением www.heverest.ru/p_plavki_speedo_lycra_brief_6_5cm_...

мне нужно получить второй xml файл или отредактировать ссылку в исходном так, чтобы она приняла вид
www.mytracker.ru/track.php?query=p_plavki_speedo_l...

<?xml version="1.0" encoding="windows-1251"?><!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2012-09-03 20:30">
<shop>
<name>Heverest.ru - онлайн-гипермаркет</name>
<company>Heverest.ru - онлайн-гипермаркет</company>
<url>http://www.heverest.ru</url>
<currencies><currency id="RUR" rate="1" plus="0"/></currencies>
<categories>
<category id="1">Обувь</category>
.....
<category id="N">Одежда</category>
</categories>
<offers>
<offer id="1" available="false" type="vendor.model"><url>http://www.heverest.ru/p_plavki_speedo_lycra_brief_6_5cm_081000003/</url><price>990.00</price><currencyId>RUR</currencyId><categoryId>1583</categoryId><picture>http://www.heverest.ru/upload/resize_cache/iblock/a62/600_600_0/08100000301_1.jpg</picture><delivery>true</delivery><local_delivery_cost>299</local_delivery_cost><typePrefix>Плавки</typePrefix><vendor>SPEEDO</vendor><model>LYCRA BRIEF 6.5CM</model><description>Плавки SPEEDO LYCRA BRIEF 6.5CM</description></offer>
.....................................
<offer id="99999" available="false" type="vendor.model"><url>http://www.heverest.ru/p_leska_spider_ultra_cast_100_m_100010562/</url><price>120.00</price><currencyId>RUR</currencyId><categoryId>1134</categoryId><picture>http://www.heverest.ru/upload/resize_cache/iblock/847/600_600_0/10001056203_1.jpg</picture><delivery>true</delivery><local_delivery_cost>299</local_delivery_cost><typePrefix>Леска</typePrefix><vendor>Spider</vendor><model>Ultra Cast 100</model><description>Леска Spider Ultra Cast 100 м</description></offer>
</offers>
</shop>
</yml_catalog>



исходный xml содержит порядка 4000 офферов
  • Вопрос задан
  • 3828 просмотров
Решения вопроса 1
@MikhailEdoshin
XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates />
    </xsl:copy>
  </xsl:template>
  <xsl:template match="url">
    <xsl:copy>
      <xsl:text>http://www.mytracker.ru/track.php?query=</xsl:text>
      <xsl:value-of select="substring-after(., "http://heverest.ru/" )" />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

Применять:

xsltproc this-xslt.xslt source.xml > target.xml

или, для форматирования:

xsltproc this-xslt.xslt source.xml | xmllint --format - > target.xml
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dxRang
@dxRang
регулярные выражения, конечно же.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы