XSLT: [торможу] как получить значения атрибутов?

yolki

есть XHTML документ с примерно такой структурой:

<div class="list">
+ <div class="article" id="post344633">
+ <div class="article" id="post331233">
+ <div class="article" id="post344322">
+ <div class="article" id="post343233">
..
</div>

(+) - означает что там что-то в нутрях есть, это пока не интересно..
как получить список всех id?

yolki

почему на

<xsl:template match="div">
<xsl:value-of select="@id"/>
</xsl:template>

оно мне выдаёт текствое содержимое дивов?

artimon

А id при этом выдаёт?
Буквально позавчера разбирался с такой проблемой, оказалось, что дело в namespace'ах.

yolki

вроде в них...
а что, никак нельзя указать процессору их не использовать?
можно sed-ом пройтись, но может штатные средства есть?

yolki

Теперь я совсем перестал что-либо понимать..
исходник (in.xml):

<?xml version="1.0"?>
<html>
<title> preved</title>
<div class="list">
<div class="article" id="post344633"/>
<div class="advert" id="XXX"/>
<div class="article" id="post344633"/>
<div class="advert" id="XXX"/>
<div class="article" id="post331233"/>
<div class="article" id="post344322"/>
<div class="advert" id="XXX"/>
<div class="advert" id="XXX"/>
<div class="article" id="post343233"/>

</div>
</html>

XSL (idlist.xsl):

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>

<xsl:template match="div[@class='article']">
<xsl:value-of select="@id"/>
</xsl:template>

</xsl:stylesheet>

Результат (Saxon и MSXSL выдают одно и то же):


preved

post344633

post344633

post331233
post344322


post343233



при чём здесь <title> ? :confused:

Dasar

с xsl первый раз работаешь?
Ps
надо помнить что у xsl есть правило по умолчанию: для элемента выводится значение самого элемента
соответственно если такое поведение не нужно, то это правило надо блокировать добавление правила в конец вида:

<xsl:template match="/ | @* | node"/>

yolki

в-третий :)
в первый раз требовалась обработка всех элементов
во второй текстов не было, вся информация была в атрибутах
Спасибо!

yolki

эээ.. если такую вещь добавить - вообще ничего не выводит :confused:

Dasar

только будь внимателен, то правило которое я привел - оно вообще все запрещает, даже обработку корневого элемента

Dasar

я бы делал, как-то так:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>

<xsl:template match="/">
<xsl:value-of select="//div[@class='article']/@id"/>
</xsl:template>

</xsl:stylesheet>


т.е. явно бы описывал, что во всем документе ищем div-ы с article и у них выводим id
ps
код не проверял, может чуть-чуть надо допилить

yolki

теперь мне понятно, в какую сторону гуглить.. один из первых запросов на "suppress unwanted text XSLT" выдаёт такой подход:

<xsl:template match="text"/>

твоё ща посмотрю
Оставить комментарий
Имя или ник:
Комментарий: