Помогите с XSLT
От: MrOrbit Россия  
Дата: 09.11.05 10:00
Оценка:
Есть некий xml документ, в нём присутсвует элемент (пускай будет <foo>). Хочеться
что-бы парсер по заданному шаблону xsl прошелся и во всём документе заменил
вхождения тега <foo> по заданному шаблону.

Как этого добиться
Пробовал так. не помогает.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" encoding="ascii"/>
<xsl:template match="/">
  <xsl:apply-templates select="//foo" />
</xsl:template>
<xsl:template match="foo">
  It seemed as worked heehe
</xsl:template>
</xsl:stylesheet>
Re: Помогите с XSLT
От: MrOrbit Россия  
Дата: 09.11.05 10:22
Оценка:
Здравствуйте, MrOrbit, Вы писали:

MO>Есть некий xml документ, в нём присутсвует элемент (пускай будет <foo>). Хочеться

MO>что-бы парсер по заданному шаблону xsl прошелся и во всём документе заменил
MO>вхождения тега <foo> по заданному шаблону.

MO>Как этого добиться

MO>Пробовал так. не помогает.
MO>
MO><?xml version="1.0" encoding="UTF-8"?>
MO><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
MO><xsl:output omit-xml-declaration="yes" encoding="ascii"/>
MO><xsl:template match="/">
MO>  <xsl:apply-templates select="//foo" />
MO></xsl:template>
MO><xsl:template match="foo">
MO>  It seemed as worked heehe
MO></xsl:template>
MO></xsl:stylesheet>

MO>


Да и ещё, хотелось бы чтобы основная структура XML осталась прежней, просто изменились необходимые мне теги.
Re[2]: Помогите с XSLT
От: ibnTeo Россия http://ibnteo.klava.org/
Дата: 09.11.05 11:48
Оценка: 6 (1)
MO>>Есть некий xml документ, в нём присутсвует элемент (пускай будет <foo>). Хочеться
MO>>что-бы парсер по заданному шаблону xsl прошелся и во всём документе заменил
MO>>вхождения тега <foo> по заданному шаблону.

MO>>Как этого добиться

MO>>Пробовал так. не помогает.
MO>>
MO>><?xml version="1.0" encoding="UTF-8"?>
MO>><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
MO>><xsl:output omit-xml-declaration="yes" encoding="ascii"/>
MO>><xsl:template match="/">
MO>>  <xsl:apply-templates select="//foo" />
MO>></xsl:template>
MO>><xsl:template match="foo">
MO>>  It seemed as worked heehe
MO>></xsl:template>
MO>></xsl:stylesheet>

MO>>


MO>Да и ещё, хотелось бы чтобы основная структура XML осталась прежней, просто изменились необходимые мне теги.


Примерно так:
<xsl:template match="/">
    <xsl:apply-templates select="*"/>
</xsl:template>

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

<xsl:template match="foo">...</xsl:template>
Re[3]: Помогите с XSLT
От: MrOrbit Россия  
Дата: 09.11.05 12:59
Оценка:
Здравствуйте, ibnTeo, Вы писали:

MO>>>Есть некий xml документ, в нём присутсвует элемент (пускай будет <foo>). Хочеться

MO>>>что-бы парсер по заданному шаблону xsl прошелся и во всём документе заменил
MO>>>вхождения тега <foo> по заданному шаблону.

MO>>>Как этого добиться

MO>>>Пробовал так. не помогает.
MO>>>
MO>>><?xml version="1.0" encoding="UTF-8"?>
MO>>><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
MO>>><xsl:output omit-xml-declaration="yes" encoding="ascii"/>
MO>>><xsl:template match="/">
MO>>>  <xsl:apply-templates select="//foo" />
MO>>></xsl:template>
MO>>><xsl:template match="foo">
MO>>>  It seemed as worked heehe
MO>>></xsl:template>
MO>>></xsl:stylesheet>

MO>>>


MO>>Да и ещё, хотелось бы чтобы основная структура XML осталась прежней, просто изменились необходимые мне теги.


T>Примерно так:

T>
<xsl:template match="/">
T>    <xsl:apply-templates select="*"/>
T></xsl:template>

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

T><xsl:template match="foo">...</xsl:template>


К сожалению это не работает. Но может пояснишь идею?? Тогда сварганим что-нибудь работающее.
Re[4]: Помогите с XSLT
От: Lloyd Россия  
Дата: 09.11.05 13:06
Оценка:
Здравствуйте, MrOrbit, Вы писали:

MO>К сожалению это не работает. Но может пояснишь идею?? Тогда сварганим что-нибудь работающее.


А что конкретно не работает?
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[4]: Помогите с XSLT
От: ibnTeo Россия http://ibnteo.klava.org/
Дата: 09.11.05 13:17
Оценка: 12 (1)
T>>Примерно так:
T>><xsl:template match="/">
T>> <xsl:apply-templates select="*"/>
T>></xsl:template>

Вызываем корневой узел (копировать структуру же надо).


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


Обрабатываем все узлы (т.е. копирование структуры), атрибуты и текст в узлах.
Использовать <xsl:copy-of select="*"/> нельзя, т.к. не будет возможности внести изменения в структуру.


T>><xsl:template match="foo">...</xsl:template>


Этот темплейт располагается ниже, поэтому предпочтение ему при встрече узла foo, а не "*|@*|text()"


MO>К сожалению это не работает. Но может пояснишь идею?? Тогда сварганим что-нибудь работающее.


Это рабочая конструкция, если не работает, то по другой причине.
Re[5]: Помогите с XSLT
От: MrOrbit Россия  
Дата: 09.11.05 13:19
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, MrOrbit, Вы писали:


MO>>К сожалению это не работает. Но может пояснишь идею?? Тогда сварганим что-нибудь работающее.


L>А что конкретно не работает?

Шаблон применяется и выход равен входу. То есть результирующий xml такой же как и входной, без измненений.
Re[5]: Помогите с XSLT
От: MrOrbit Россия  
Дата: 09.11.05 13:28
Оценка:
Здравствуйте, ibnTeo, Вы писали:

T>>>Примерно так:

T>>><xsl:template match="/">
T>>> <xsl:apply-templates select="*"/>
T>>></xsl:template>

T>Вызываем корневой узел (копировать структуру же надо).



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


T>Обрабатываем все узлы (т.е. копирование структуры), атрибуты и текст в узлах.

T>Использовать <xsl:copy-of select="*"/> нельзя, т.к. не будет возможности внести изменения в структуру.
Это ты здорово придумал, а я сходу не догадался как мне обойти это ограничение

T>>><xsl:template match="foo">...</xsl:template>


T>Этот темплейт располагается ниже, поэтому предпочтение ему при встрече узла foo, а не "*|@*|text()"



MO>>К сожалению это не работает. Но может пояснишь идею?? Тогда сварганим что-нибудь работающее.


T>Это рабочая конструкция, если не работает, то по другой причине.


Вообщем, чтобы не играть в испорченный телефон, кину код

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="Test.xsl"?>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>
      <foo>Hello World</foo>
    </title>
  </head>
  <body>
      <div>
      </div>

      <foo>
        some unuseful information here
      </foo>

  </body>
</html>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <xsl:apply-templates select="*"/>
</xsl:template>

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

<xsl:template match="foo">...</xsl:template>

</xsl:stylesheet>
Re[5]: Помогите с XSLT
От: MrOrbit Россия  
Дата: 09.11.05 13:41
Оценка:
T>>><xsl:template match="*|@*|text()"><xsl:copy><xsl:apply-templates select="*|@*|text()"/></xsl:copy></xsl:template>

T>Обрабатываем все узлы (т.е. копирование структуры), атрибуты и текст в узлах.

T>Использовать <xsl:copy-of select="*"/> нельзя, т.к. не будет возможности внести изменения в структуру.


T>>><xsl:template match="foo">...</xsl:template>


T>Этот темплейт располагается ниже, поэтому предпочтение ему при встрече узла foo, а не "*|@*|text()"


А почему? Я вот вычитал в стандарте на w3.org/xslt

The order in which the children of the xsl:stylesheet element occur is not significant except for xsl:import elements

То есть порядок элементов не имеет значения.

Может поэтому темплейт и не работает?
Re[6]: Помогите с XSLT
От: Lloyd Россия  
Дата: 09.11.05 15:04
Оценка: 18 (1)
Здравствуйте, MrOrbit, Вы писали:

MO>Вообщем, чтобы не играть в испорченный телефон, кину код


MO>
MO><?xml version="1.0" encoding="utf-8" ?>
MO><?xml-stylesheet type="text/xsl" href="Test.xsl"?>

MO><html xmlns="http://www.w3.org/1999/xhtml" >
MO>  <head>
MO>    <title>
MO>      <foo>Hello World</foo>
MO>    </title>
MO>  </head>
MO>  <body>
MO>      <div>
MO>      </div>

MO>      <foo>
MO>        some unuseful information here
MO>      </foo>

MO>  </body>
MO></html>
MO>


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
...
<xsl:template match="xhtml:foo">...</xsl:template>
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[5]: Помогите с XSLT
От: Lloyd Россия  
Дата: 09.11.05 15:05
Оценка:
Здравствуйте, ibnTeo, Вы писали:

T>>><xsl:template match="foo">...</xsl:template>


T>Этот темплейт располагается ниже, поэтому предпочтение ему при встрече узла foo, а не "*|@*|text()"



Не правда твоя. Кури спеку по поводу вычисления приоритета.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[7]: Помогите с XSLT
От: MrOrbit Россия  
Дата: 10.11.05 07:10
Оценка:
L>
L><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
L>...
L><xsl:template match="xhtml:foo">...</xsl:template>
L>


Круто

А теперь хотелось бы узнать идею того, как это работает
Re[8]: Помогите с XSLT
От: Lloyd Россия  
Дата: 10.11.05 08:49
Оценка: :)
Здравствуйте, MrOrbit, Вы писали:

MO>Круто


MO>А теперь хотелось бы узнать идею того, как это работает


Легко.

XSL Transformations (XSLT)
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[6]: Помогите с XSLT
От: ibnTeo Россия http://ibnteo.klava.org/
Дата: 10.11.05 15:10
Оценка:
T>>>><xsl:template match="foo">...</xsl:template>

T>>Этот темплейт располагается ниже, поэтому предпочтение ему при встрече узла foo, а не "*|@*|text()"



L>Не правда твоя. Кури спеку по поводу вычисления приоритета.


А действительно ведь. Всего не перечитаешь, многие вещи быстрее на практике осваивать. А я всё время думал по-другому (и делал), и при этом всё работало
Ну по крайней мере при двух одинаковых темплейтах предпочтение будет у последнего. Удобно иногда так отлаживать.
Re[7]: Помогите с XSLT
От: Lloyd Россия  
Дата: 10.11.05 15:20
Оценка:
Здравствуйте, ibnTeo, Вы писали:

T>А действительно ведь. Всего не перечитаешь, многие вещи быстрее на практике осваивать. А я всё время думал по-другому (и делал), и при этом всё работало


T>Ну по крайней мере при двух одинаковых темплейтах предпочтение будет у последнего. Удобно иногда так отлаживать.



Там это тоже прописано:

It is an error if this leaves more than one matching template rule. An XSLT processor may signal the error; if it does not signal the error, it must recover by choosing, from amongst the matching template rules that are left, the one that occurs last in the stylesheet.

... << RSDN@Home 1.1.4 stable rev. 510>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.