Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как проверить наличие тэга в xml используя xsl 
:(
    Опции темы
serg313
Дата 31.10.2011, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 31.10.2011

Репутация: нет
Всего: нет



У меня два вопроса к уважаемым спецам по xsl. Есть приблизительно следующий xml
Код

<roottag>
      <tag1>qqqq</tag1>
      <tag2 xsi:type="aaaaaa">
         <tag3>bbb</tag3>
         <tag4>ccc</tag4>
         <tag5>ddd</tag5>
      </tag2>
         <tag2 xsi:type="bbbbb">
          <tag3>kkk</tag3>
          <tag5>lll</tag5>
      </tag2>
</roottag>

Вопрос первый: Как получить значение атрибута xsi:type в тэге tag2.
Я пишу
Код

    <xsl:template match="tag2">
        <td>
            <xsl:value-of select="@xsi:type"/>
        </td>
      
        <xsl:apply-templates/>
    </xsl:template>

Но получаю ошибку: пространство имен xsi не декларировано.

И второй вопрос. Как из tag5 узнать присутствует ли tag4(его может не быть).
Я пишу:
Код


    <xsl:template match="tag5">
        <xsl:if test="/roottag/tag2/tag4 = true()">
            <td>0</td>
        </xsl:if>
       
            
    </xsl:template>


Но это не работает правильно.
Заранее спасибо.
PM MAIL   Вверх
Egik2
Дата 31.10.2011, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 29.7.2008
Где: Агудзера

Репутация: нет
Всего: 11



Вот пример xslt кода который реализует это

Код

<?xml version="1.0" encoding="UTF-8" ?>

<!-- New document created with EditiX at Mon Oct 31 15:43:45 MSK 2011 -->

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>

    <xsl:output method="xml" indent="yes"/>
    
    <xsl:template match="/">
        
        <GET_ATTR>
            <xsl:value-of select="/roottag/tag2/@xsi:type"/>
        </GET_ATTR>
        
        <CHECK>
            <xsl:if test="/roottag/tag2/tag6">
                <EXISTS>1</EXISTS>
            </xsl:if>
        </CHECK>
    </xsl:template>
    
    

</xsl:stylesheet>






Необходимо было добавить xmlns:xsi="http://www.w3.org/TR/html4/" и в XML и в XSLT файл


Код

<?xml version="1.0" encoding="UTF-8"?>
<roottag xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
      <tag1>qqqq</tag1>
      <tag2 xsi:type="aaaaaa">
         <tag3>bbb</tag3>
         <tag4>ccc</tag4>
         <tag5>ddd</tag5>
      </tag2>
         <tag2 xsi:type="bbbbb">
          <tag3>kkk</tag3>
          <tag5>lll</tag5>
      </tag2>
</roottag>



Это сообщение отредактировал(а) Egik2 - 31.10.2011, 16:16


--------------------
Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall)
a-nav.com
developer-blog.ru
world-poetry.org
PM MAIL WWW ICQ   Вверх
serg313
Дата 31.10.2011, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 31.10.2011

Репутация: нет
Всего: нет



Уважаемый Egik2 спасибо, первая проблема решилась, я забыл правильно добавить пространство имен в xsl файл. 
Но вот вторая проблема к сожалению не решилась, приведенный Вами код действительно определяет наличие тэга, но в принципе есть он или нет, другими словами, в моем случае всегда условие
Код

 <xsl:if test="/roottag/tag2/tag4">

будет давать true, т.к. tag4 в принципе есть, но мне нужно при заходе в tag2 определить есть ли у данного tag2(т.е. у того, который в данный момент анализируется) подчиненный tag4 или нет 
PM MAIL   Вверх
magelan
Дата 1.11.2011, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 7
Всего: 16



смешная проблема...

Код

<xsl:template match="tag2">
     <xsl:if test="tag4">
          <!-- Есть ребенок tag4 -->
     </xsl:if>
     <xsl:if test=".//tag4">
          <!-- Есть ребенок или внучка или правнучек tag4 (любой потомок), дорогая операция поиска -->
     </xsl:if>
</xsl:template>


да, чуть не забыл, из таг 5
Код

<xsl:template match="tag5">
     <xsl:if test="preceding-sibling::tag4 | following-sibling::tag4">
          <!-- Смотрим в обе стороны уровня в поисках tag4 -->
     </xsl:if>
</xsl:template>


Это сообщение отредактировал(а) magelan - 1.11.2011, 10:29
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0683 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.