xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

XSLT и IMS CP Meta-data


Автор Сообщение
Zafo
Новичок

Зарегистрирован: 14.02.2009
Сообщения: 1

[13562] Сб Фев 14, 2009 14:31
XSLT и IMS CP Meta-data
Всем привет!

У меня вот какая проблема. Есть XML-файл с метаданными, построенными по модели IMS CP:

<?xml version="1.0"?>
<?xml-stylesheet type='text/xsl' href='cut_items.xsl'?>
<manifest
xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"
xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2"
xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1
http://www.imsglobal.org/xsd/imscp_v1p1.xsd
http://www.imsglobal.org/xsd/imsmd_v1p2
http://www.imsglobal.org/xsd/imsmd_v1p2.xsd"
idetifier=""Manifest1-CECCFF-3201-1342-8F42-3DFFF12F4198"
version="IMS CP 1.1.4">

<organizations default="org_0001_0123456789">
<organization identifier="org_0001_0123456789" structure="hierarchical">
<title>Organization 1</title>
<item identifier="item_sec_0000_0123456789" isvisible="true">
<title>Title 1</title>
<metadata></metadata>
</item>
</organization>
</organizations>
</manifest>

Мне из него нужны только элементы <item> и значения узлов <title>. Написал XSLT-шаблон (cut_items.xsl), который должен их находить. Однако фрагмент кода

<xsl:template match="//item">
<xsl:value-of select="count(//@identifier)"/>
</xsl:template>

выводит ноль. Кто-нибудь может предложить решение? Я понимаю, что здесь должно быть все очень просто, но почему-то туплю =)

--------------------------------------
UPD: О! Доперло. Можно сделать выборку

<xsl:for-each select="//*[starts-with(@identifier, 'item')]">
<xsl:value-of select="*[1]"/>
</xsl:for-each>

И тогда мы увидим только содержание узла <title> Smile Ура!
olpa
Любитель

Зарегистрирован: 23.04.2002
Сообщения: 981
Откуда: Санкт-Петербург
Посетить сайт автора
[13566] Вт Фев 17, 2009 09:40

Цитата:

Однако фрагмент кода

<xsl:template match="//item">
<xsl:value-of select="count(//@identifier)"/>
</xsl:template>

выводит ноль


Это потому, что шаблон написан для элементов с полным именем "{}item", а в исходном XML'е полное имя у элемента "{http://www.imsglobal.org/xsd/imscp_v1p1}item".

В XSLT надо объявить пространство имён xmlns:xxx="http://www.imsglobal.org/xsd/imscp_v1p1" и в match использовать "//xxx:item".