2013-05-11 2 views
1

Моя цель - использовать файлы xml (версия 1.0) и xsl (версия 1.0) для создания html-страниц.Confused: Как выбрать XML-контент с помощью ID в XSL

Это код в моем файле XML:

<Photo> 
<Text id="one">This is the first Photo</Text> 
<Image id="one" src="http://cdn.theatlantic.com/static/infocus/ngpc112812/s_n01_nursingm.jpg" /> </Photo> 
<Photo> 
<Text id="run">This is the run picture/Text> 
<Image id="run" src="http://www.krav-maga.org.uk/uploads/images/news/running.jpg" /> </Photo> 

Я пытаюсь выбрать отдельные части моего XML-документа, используя их ID. Я также сделал бы это с другим текстом или параграфами, которые «я также дам ID». В настоящий момент я использую функцию для каждой функции, чтобы сразу представлять все изображения, но я не знаю, как именно я мог выбрать отдельные файлы. Я думал о чем-то вроде этого:

<xsl:value-of select="Photo/Text[one]"/> 
<img> 
<xsl:attribute name="src" id="one"> 
<xsl:value-of select="Photo/Image/@src"/> 
</xsl:attribute> 
</img> 

и

<xsl:value-of select="Photo/Text[run]"/> 
<img> 
<xsl:attribute name="src" id="run"> 
<xsl:value-of select="Photo/Image/@src"/> 
</xsl:attribute> 
</img> 

Но она не работает :(Я попробовал, что я могу, но я потерял могли бы вы мне помочь

ответ

1

.? синтаксис вы ищете это

<xsl:value-of select="Photo/Text[@id='one']" /> 

И это

<xsl:value-of select="Photo/Image[@id='one']/@src" /> 

Однако вы, вероятно, не хотите повторять эту кодировку для каждого возможного @id, который у вас может быть. Было бы легко использовать сопоставление шаблонов здесь, и просто выберите элементы и обработайте их одним общим шаблоном. Вот пример XSLT будет показано это сделано

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" indent="yes"/> 

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

    <xsl:template match="Photo"> 
     <xsl:value-of select="Text" /> 
     <img src="{Image/@src}" /> 
    </xsl:template> 
</xsl:stylesheet> 

Этот вывод будет следующим

This is the first Photo 
<img src="http://cdn.theatlantic.com/static/infocus/ngpc112812/s_n01_nursingm.jpg"> 
This is the run picture 
<img src="http://www.krav-maga.org.uk/uploads/images/news/running.jpg"> 

Также обратите внимание на использование «атрибут шаблонов Значение» в создании Src атрибут для изображения, который заставляет XSLT neater писать.

+0

+1 хороший и полный. – Tomalak

Смежные вопросы