2013-04-26 2 views
0

У меня есть следующий XML:доступа HTML DIV в XML, используя XSL для преобразования

<item> 
<title>Testing WebForm</title> 
<link>http://linkurlhere.com</link> 
<description> 
    <div class="field field-name-body field-type-text-with-summary 
    field-label-hidden"><div class="field-items"><div class="field-item even"  
    property="content:encoded"><div style="background-color: white; width: 100%;"> 
    <div id="prize" style="background-color: yellow; color: #660000; font-weight: 
    bold; width: 200px;">Prize here</div> 
    </div> 
    <div id="startDate">Start Date: January 1, 2013</div> 
    <div id="endDate">End Date: January 1, 2014</div> 
    <p></p> 
    <p>Thanks for playing please take the survey - mock intro</p> 
    </div></div></div></description> 
</item> 

Мне нужно отобразить <description> узла DIV ID = приз.

Есть ли способ получить доступ к этому с помощью xsl: value-of?

Там будет п число этих элементов, поэтому я хотел бы, чтобы поместить их в пределах XSL: для-каждого

Так будет выглядеть на этот счет:

<xsl:for-each select="item"> 
display value of <description><div id="prize">content</div></description> 
</xsl:for-each> 

Любые идеи будут быть наиболее оцененным.

ответ

0

Ваше XSL должно быть написано, как это.

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

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:output method="html"/> 

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

    <xsl:template match="document" name="document"> 
     <xsl:apply-templates select="item"> 
     </xsl:apply-templates> 
    </xsl:template> 

    <xsl:template match="item" name="item"> 
     <xsl:apply-templates select="description"> 
     </xsl:apply-templates> 
    </xsl:template> 

    <xsl:template match="description" name="description"> 
     <xsl:value-of select=".//div[@id='prize']" /> 
    </xsl:template> 

</xsl:stylesheet> 

где <document> предполагается в качестве корневого элемента файла XML.

Edit: Если у вас есть три <item> и дивы имеет различные значения, как <div id="prize">Prize here 1</div> и <div id="prize">Prize here 2</div> и <div id="prize">Prize here 3</div> тогда он будет печатать премии здесь 1 Приз здесь 2 Приза здесь 3 Здесь я дал одно общего решения для обхода <item> элементов если их много. Если у вас есть один или несколько, то они будут работать соответственно.

+0

В '// descendant :: div',' descendant :: 'избыточно. Если вы хотите, чтобы значение выбирало только 'div', которые являются потомками текущего 'описания', используйте' .// div'. Как показано, ваша таблица стилей будет выбирать каждый 'div [@ id = 'приз']' несколько раз (один раз за «элемент/описание»). – LarsH

+0

@LarsH: Хорошо указывать. Я обновил ответ с более подробной информацией – NullPointer

+0

Спасибо за ответы .... У меня есть следующее: ' 'и я не получаю никакого призового значения ...? – user1689274

1

В для-каждого,

<xsl:value-of select="description//div[@id='prize']" /> 
+0

Im не получил ничего, что было возвращено на страницу Lars, есть ли что-то, что мне нужно на моей таблице стилей xsl? '

' – user1689274

+0

более конкретно моя IDE (затмение) выплевывает ошибку, xpath недействителен – user1689274

+0

@ user1689274: Я не вижу ничего синтаксически неправильного с вышеупомянутым XPath. Но обратите внимание на мое редактирование, что должно быть двойное '//' after 'description'. В зависимости от того, что это означает «недействительным», это может быть проблемой. – LarsH

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