2014-10-13 6 views
0

Вот мой XML:Как вывести тег IMG из XML с помощью XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<Collection> 
    <Content> 
     <ID>2779</ID> 
     <Type>Content</Type> 
     <Title>Article One</Title> 
     <QuickLink>/template.aspx?id=2779</QuickLink> 
     <Teaser /> 
     <Html> 
      <root> 
       <NewsArticle> 
        <artTitle>The Comprehensive Breast Center: Quality Care on the Fast Track</artTitle> 
        <artThumb> 
         <img alt="Thumb Article One" src="/uploadedImages/Test/News/artOne.png?n=5954" /> 
        </artThumb> 
        <artFull /> 
        <releaseDate /> 
        <contactName /> 
        <contactPhone /> 
        <contactEmail /> 
        <artTeaser>The National Cancer Institute estimates that a woman in the United States has a 1 in 8 chance of developing invasive breast cancer</artTeaser> 
        <artText> 
         <p>The Comprehensive Breast Center: Quality Care on 
the Fast Track</p> 
         <p> 

Как отобразить тег IMG из моего XML выше к HTML-документа с помощью XSLT

ответ

1

Что-то вроде этого должно сделать трюк:

<xsl:template match="/"> 
    <xsl:for-each select="Collection/Content"> 
    <xsl:copy-of select="Html/root/NewsArticle/artThumb/node()"/> 
    </xsl:for-each> 
</xsl:template> 

Я хотел бы отметить, что это предполагает, что вы получаете это из коллекции Ektron - предположение, сделанные на основе вашего мечения го есть вопрос. Это отобразит изображение из каждого блока содержимого в коллекции. Если вы хотите просто изображение из первого содержимого блока сбора, вы можете удалить for-each и вместо того, чтобы использовать что-то вроде этого:

<xsl:template match="/"> 
    <xsl:copy-of select="Collection/Content/Html/root/NewsArticle/artThumb/node()"/> 
</xsl:template> 

Кроме того, он работает так или иначе, но я убрал слэш из передней части выберите для каждого. Считается избыточным, поскольку код находится в шаблоне, который уже совпадает с «/».

UPDATE

Некоторые из этого можно сделать в рабочей области - это позволяет установить класс CSS, хотя я не уверен, если вы можете установить атрибут заголовка изображения. Вот как вы могли это сделать с помощью XSLT. В этом случае, вы не можете скопировать узел весь распродажи:

<xsl:template match="/"> 
    <xsl:for-each select="Collection/Content"> 
    <xsl:variable name="imageSrc" select="Html/root/NewsArticle/artThumb/img/@src" /> 
    <xsl:variable name="imageId"> 
     <xsl:text>NewsArticle_</xsl:text> 
     <xsl:value-of select="ID" /> 
     <xsl:text>_image</xsl:text> 
    </xsl:variable> 
    <xsl:variable name="contentTitle" select="Html/root/NewsArticle/artTitle" /> 

    <img id="{ $imageId }" class="myCssClass" title="{ $contentTitle }" alt="{ $contentTitle }" src="{ $imageSrc }" /> 
    </xsl:for-each> 
</xsl:template> 

(.! Обновленный снова - появляется я неправильно интерпретировал свой комментарий Спасибо, @ MathiasMüller) При назначении идентификаторов элементов, как это, я предпочитаю используйте немного больше, чем только идентификатор содержимого. В этом случае, используя «NewsArticle_ {Content ID} image», я разрешаю контейнеру div использовать идентификатор «NewsArticle {Content Id}», если это необходимо в будущем, не сталкиваясь с идентификаторами изображений.

+0

Wow я действительно смотрел, чтобы сделать это, но не был уверен в синтаксисе. Спасибо. Я проверю это. – SearchForKnowledge

+0

Как назначить заголовок и alt из 'artTitle', а также класс и id? – SearchForKnowledge

+0

Благодарим за редактирование – SearchForKnowledge

1

Как назначить название и alt из artTitle, а также класс и идентификатор?

Опираясь на ответ дается @BrianOliver, это то, как вам выводить img элемент, «название» атрибут отражает содержание artTitle от вашего входного XML - то же самое для ID.

Я предполагаю, что на основе «alt from artTitle» вы подразумеваете, что текстовое содержимое img/@alt также должно поступать из элемента artTitle.

<xsl:template match="/"> 
    <xsl:for-each select="Collection/Content"> 
    <xsl:variable name="imageSrc" select="Html/root/NewsArticle/artThumb/img/@src" /> 
    <!--xsl:variable name="imageAlt" select="Html/root/NewsArticle/artThumb/img/@alt" /--> 
    <xsl:variable name="imageId" select="ID"/> 
    <xsl:variable name="imageTitle" select="Html/root/NewsArticle/artTitle"/> 

    <img id="{$imageId}" class="myCssClass" title="{$imageTitle}" alt="{ $imageTitle}" src="{$imageSrc}"/> 
    </xsl:for-each> 
</xsl:template> 

Однако, я не уверен, где атрибут class должен поступать из.

+0

Muller ... Спасибо за ответ. Оба ваших ответа действительно помогли! Я проголосовал. – SearchForKnowledge

+0

@SearchForKnowledge Добро пожаловать. Могу я попросить вас принять ответ Брайана? Он приложил больше усилий в ответ. –

+0

Да, сэр. Я сделаю это. Поскольку оба ответа были очень полезны, к сожалению, я не могу согласиться с ними. Еще раз спасибо. – SearchForKnowledge

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