сохранение атрибутов узла
От: dyuzhev2004  
Дата: 21.11.06 10:32
Оценка:
Есть XML:
<?xml version="1.0" encoding="UTF-8"?>
<a>
  <b id="1">
    <c name="a">
    A
    </c>
  </b>
</a>


Нужно заменить букву A в элементе c.

Вот 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 select="@*|node()"/>
  </xsl:copy>
</xsl:template>  
<xsl:template match="b/c">
  <xsl:copy>
     <xsl:copy-of select="translate(.,'A','B')"/>
  </xsl:copy>
</xsl:template>
</xsl:stylesheet>


На выходе получается такой XML:
<?xml version="1.0" encoding="UTF-8"?>
<a>
<b id="1">
<c>
B
</c>
</b>
</a>

Все бы хорошо, но куда пропал атрибут "name" элемента "c" ?

Можно, конечно, заново создать элемент "c" с атрибутом name, но может есть способ попроще ?
Re: сохранение атрибутов узла
От: dyuzhev2004  
Дата: 22.11.06 06:55
Оценка:
D>Нужно заменить букву A в элементе c.

Разобрался сам. Отвечаю сам себе

Нужно было добавить text() в конце xpath. Вот правильный вариант:
<xsl:template match="b/c/text()">
Re: сохранение атрибутов узла
От: Lloyd Россия  
Дата: 23.11.06 12:42
Оценка:
Здравствуйте, dyuzhev2004, Вы писали:

D>
D><?xml version="1.0" encoding="UTF-8"?>
D><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
D><xsl:template match="@*|node()">
D>  <xsl:copy>
D>    <xsl:apply-templates select="@*|node()"/>
D>  </xsl:copy>
D></xsl:template>  
D><xsl:template match="b/c/text()">
D>     <xsl:copy-of select="translate(.,'A','B')"/>
D></xsl:template>
D></xsl:stylesheet>
D>
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.