2008 4 августа 2008

Проблема с позиции () в XSL ... или нет?

У меня была эта проблема strage при создании XSL сегодня. Посмотрел ответы всей сети, но не мог найти .... На самом деле я думаю! Я знаю, что вмятина моя проблема была, так что мне искать?

Во всяком случае! Только в случае, если у вас есть эта же проблема и как-то слишком силой заставить вас удалось посадить на этой странице ... Вы меня благодарить тонн ... И если вы случайно приземлился на этой странице, по непонятной судьба и вы будете Разработчик XSL, DO Запишите это сейчас, НА БУДУЩЕЕ причина, если в один прекрасный день, вы сталкиваетесь с этой проблемой, то сила не может быть с вами.

Постановка задачи:
У меня есть XML, где есть два узла с несколькими элементами в нем и элементы между этими двумя узлами имеют взаимно однозначное соответствие. В приведенном ниже примере, каждый элемент в узле <array name="PLAYURL" /> относится (соответствующее положение) элемент в узле <array name="SITENAME" />

<?xml version="1.0" encoding="utf-8"?>
<myplaylists>
<playlist>
<title>Best of Rest </title>
<array name="SITENAME">
<str>www.musicindiaonline.com</str>
<str>www.dhingana.com</str>
<str>www.raaga.com</str>
<str>www.smashits.com</str>
<str>www.desimusic.com</str>
<str>www.musicplug.in</str>
</array>
<array name="PLAYURL">
<str>http://www.musicindiaonline.com/123/</str>
<str>http://www.dhingana.com/play/123</str>
<str>http://www.raaga.com/123</str>
<str>http://ww.smashits.com/123</str>
<str>http://www.desimusic.com/123</str>
<str>http://www.musicplug.in/123</str>
</array>
</playlist>
</myplaylists>

Теперь у меня есть цикл, где я цикле <array name="SITENAME">, и я хочу, чтобы получить соответствующий пункт (на соответствующую позицию) в <array name="PLAYURL">,

Что бы вы normaly попытаться сделать, это ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
play from : <a href="{../../array[@name='PLAY']/str[position()]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

ИЗВИНИТЕ! Это не подходит ... Ах! Surpised ...

Теперь вы, вероятно, хотите попробовать, что-то вроде этого ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos"> <xsl:value-of select="position()"/></xsl:variable>
play from : <a href="{../../array[@name='PLAY']/str[$pos]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

И снова это не будет работать ... Теперь вас чесать затылок, пытаясь связаться с каждого, кто вы думаете, знает несколько XSL и может быть любой помощи ... Вы пытаетесь любой другой вариант ... и все же это не будет работать ... Ну! Вот что случилось со мной, по крайней мере ...

DONT отчаивайтесь!! Попробуйте это

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$
<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$ pos-int ]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>
]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

Не спрашивайте меня, почему это РАБОТАЕТ. Потому что я не имею права причина ... если вы делаете! Пожалуйста удалить комментарий. Это может быть очень полезным. Кроме того! если у вас есть лучшее название для этой должности, сделать напишите мне :)


2008 2 августа 2008

Установка DOCTYPE в XSL

На прошлой неделе я создал progessive HTML / CSS макет для клиента, тестировал в IE6, IE7 и FF 3, казалось, прекрасно ... ПОКА! макет пошел дальше вниз по manufacting цикла. Это не удалось. Элементы макета страницы просто пошел повсюду, когда макет HTML был преобразован в XSL и XML применяется к нему ... Лентяй!

Не могу спать нормально в минувшие выходные, в преддверии понедельник утром, когда я должен буду решить эту SH **. Но теперь есть немного Experince в борьбе с такого рода ситуациями (Browser совместимости, я имею в виду), я знал, что было связано с не что иное, DOCTYPE .... и это было ...

Проблема:
Вы хотите, чтобы контроль над DOCTYPE, так как ваша трансформация будет включать в себя по умолчанию DOCTYPE явным, и макет будет за жеребьевкой.

Решение:
Спецификации XSLT предоставляет методы вывода для установки в DOCTYPE выбор. Кроме того, для нас интерфейса разработчики, темы, представляющие интерес был бы HTML методов вывода и методы вывода XML .

Ну! прежде чем вы получите скучно, вот исправление.

Для, например, если у вас следующие DOCTYPE в HTML-версии. -

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Затем в XSL вы должны были бы иметь следующее: -

<xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/loose.dtd" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" indent="yes" />

и, наконец! Как убедиться, что ваш выход XSLT подчиняется DOCTYPE вы выбрали.


2008 4 мая 2008

Включите в XSL XSL

Если XML / XSL преобразования ваш Домиана, то есть времена, когда мы хотим peice динамического кода, который будет использоваться библиотека пункта (будет сделано повторного использования). Что я имею в виду, вероятно, можно было бы сделать более ясной в этом примере сценария.

Представьте, что вы создаете веб-сайт (с использованием XML, XSL transfroms конечно же), и большинство из страниц будет иметь модуль комментариев. Ну! то либо скопировать или вставить этот код в каждую страницу шаблона (который я не имею сказать, но сделать техническое обслуживание и доработку кошмар), или даже лучше, вы создаете INCLUDE файл, который может вырваться в том, где бы Вы не хотите его в вашу страницу ( а) ...
Так как мы создаем файл XSL INCLUDE и включить его в другой файл XSL? Вот как ...

Просто чтобы было понятно ... Вот краткий список файлов, которые вы можете создать ... вот, мы будем в том числе информацию о фруктах и ​​овощах в родительской страницы называют пищей.

1. food.xml - XML-файл данных, на которых преобразования будут применяться
2. food.xsl - основной файл XSL, который превратит наш food.xml
3. inc_fruits.xsl - XSL включает файл, который будет оказывать фрукты данных
4. inc_vegtables.xsl - XSL включает файл, который будет оказывать vetetables данных

Я не думаю, что я во многом объясняют, коды для вышеуказанных элементов, будут понятны ...

FOOD.XML


<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>

<vegetables>
<item name="spinach" moreinfo="http://www.spinach.com">Spinach is full of iron</item>
<item name="asparagus" moreinfo="http://www.asparagus.com">Asparagus contains loads of vitamin D </item>
<item name="fenugreek" moreinfo="http://www.fenugreek.com">Fenugreek is rich in vitamin C</item>
</vegetables>
</food>


FOOD.XSL


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="inc_fruits.xsl" />
<xsl:include href="inc_vegetables.xsl" />
<xsl:template match="/">
<html>
<head>
<title>Title</title>
</head>
<body>
<h3><xsl:value-of select="/food/description" /></h3>
Modification Date : <xsl:value-of select="/food/date" />
<hr/>
<h5> About Fruits</h5>
<xsl:call-template name="about_fruits"/>

<hr/>
<h5> About Vegetables</h5>
<xsl:call-template name="about_vegetables"/>

<hr/>
</ Body>
</ Html>
</ XSL: шаблоны>
</ XSL: стиль>


INC_FRUITS.XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" />
<xsl:template name="about_fruits">
<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


INC_VEGETABLES.XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" />
<xsl:template name="about_vegetables">
<xsl:for-each select="/food/vegetables/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Скачать все вышеуказанные файлы здесь (252 скачиваний)


2008 4 апреля 2008

Работа с атрибутами XML узлов в XSLT

Если вы используете XML и XSL, то вы могли встретить то время, когда нужно играть с атрибутами и значениями узлами вы XSL. Они нагрузок сайтов долго наматывается информацию об этом, но никто не нашел были краткими и точными ... Это не XML / XSL учебника, но мои попытки поставить вместе, какой-то обман список ...

Образец XML, что мы будем работать с выглядит следующим образом ...

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>
</food>

Итак, давайте начинать преобразования наших выше XML с помощью XSL

Пример 1: Вывод значения в выбранных атрибутов

<xsl:value-of select="/food/fruits/item[@name='orange']" /><br />
to get more information about <a href="{/food/fruits/item[@name='orange']/@moreinfo}" target="new" ><xsl:value-of select="/food/fruits/item[@name='orange']/@name" /> </a>

HTML результат будет выглядеть

Orange is the color and rich in vitamin C,
to get more information about <a href="http://www.orange.com" target="new">


Пример 2: Цикл через и отображения XML все имена атрибутов и их значений

<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>,
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>

HTML результат будет выглядеть


attribute name : name, attribute value : mango
attribute name : moreinfo, attribute value : http://www.mango.com
attribute name : name, attribute value : banana
attribute name : moreinfo, attribute value : http://www.banana.com
attribute name : name, attribute value : orange
attribute name : moreinfo, attribute value : http://www.orange.com
attribute name : name, attribute value : Papaya
attribute name : moreinfo, attribute value : http://www.papaya.com


Скачать все вышеуказанные файлы здесь (245 скачиваний)



Смотреть это пространство, я буду обновлять этот новым выводам ...


NDK дома | Выражая IT | Выражая неба | Выражая Penmenship | Выражая трепет | выразить себя