Xpoint
   [напомнить пароль]

Изменить исходный xml-файл

Метки: [без меток]
2012-08-27 10:16:30 [обр] walek[досье]

Привет.

У меня есть 2 xml-файла:
основной

<?xml version='1.0' standalone='yes'?>
<opt>
  <map>
    <room>
      <rnumber>17</rnumber>
      <title>Аптека 36.6</title>
    </room>
    <room>
      <rnumber>18</rnumber>
      <title>Оптик-Экспресс</title>
    </room>
    <room>
      <rnumber>19</rnumber>
      <title>Л'Этуаль</title>
    </room>
    ...
</opt>

и дополнительный

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="number1">
   <polygon fill="#F4D192" points="736.064,11.333 736.064,11.5 736.064,71.402 775,71.402 775,71.5 775,284.766 761,284.766 
      761,304.766 719.596,304.766 719.596,310.5 684.5,310.5 684.5,409.4 684.5,409.434 775.102,409.434 868.333,409.434 
      868.333,312.766 880.233,312.766 880.233,11.5 880.233,11.333    "/>
   <text transform="matrix(1 0 0 1 749.5 366.5)" fill="#231F20" font-family="'PTSans-Caption'" font-size="18">МВидео</text>
</g>
<g id="number2">
   <polygon fill="#F4D192" stroke="#FFFFFF" stroke-miterlimit="10" points="592.5,305.047 592.5,409.404 329.333,409.404 
      329.333,305    "/>
   <text transform="matrix(1 0 0 1 394.1333 366.5)" font-family="'PTSans-Caption'" font-size="18">Старик Хоттабыч</text>
</g>
...
</svg>

Задача: нужно из основного xml-файла взять названия из room/title и вставить в дополнительный xml-файл в g/text, т. е. на выходе должны быть узлы дополнительного файла, но в узле <text> названия брались из основного, из room/title

Подскажите пожалуйста, почему не работает это преобразование?

<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html" indent="yes" />
<xsl:variable name="main" select="document('test.xml')" />

<xsl:template match="text">
   <xsl:copy>
      <xsl:apply-templates select="@*" />
      <xsl:value-of select="$main/opt/map/room[rnumber = current()/../g/substring(@id, 7, 2)]/title" />
   </xsl:copy>
</xsl:template>

<xsl:template match="@* | node()">
   <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
   </xsl:copy>
</xsl:template>
</xsl:stylesheet>
Powered by POEM™ Engine Copyright © 2002-2005