2009-08-18 3 views
1

У меня проблемы с пониманием xslt. В моем исходном документе мне нужно найти внутренний текст из тега <p> с атрибутом класса, равным "deck".понимание xslt обработка элементов с атрибутами

В моем исходном XML где-то:

<body> 
    <p class="deck">Text here</p> 
... ... cut ... ... ... 

В моем XSL файл

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:TimeInc="http://www.timeinc.com/namespaces/PAMTimeInc/1.0/" 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:prism="http://prismstandard.org/namespaces/basic/2.1/" 
    xmlns:pam="http://prismstandard.org/namespaces/pam/2.1/" 
    xmlns:pim="http://prismstandard.org/namespaces/pim/2.1/" 
    xmlns:prl="http://prismstandard.org/namespaces/prl/2.1/"> 

    <xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/> 
    <Description> 
    <xsl:choose> 
     <xsl:when test="//[email protected] != ''"> 
     <xsl:value-of select="//[email protected]"/> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:text disable-output-escaping="yes"/> 
     </xsl:otherwise> 
    </xsl:choose> 
    </Description> 
... ... cut ... ... ... 

Это, очевидно, неправильно, потому что я не знаю, что я делаю. Есть ли пример где-то, как это сделать или понимать его больше.

ответ

2

Я не вижу никого, кто послужит основой вашего шаблона. Я предполагаю, что это проблема с вырезанием и вставкой.

Во всяком случае, XPath, чтобы найти все р элементы с атрибутом класса, установленным на палубе: // р [@ класс = 'палубе']

Вы можете перебирать их с:

<xsl:for-each select="//p[@class='deck'"> 
</xsl:for-each> 
+1

спасибо очень много, окончательный код в конечном итоге являются: stephenbayer

2

Вы можете выразить условный матч на элемент на основе значения атрибута, например

element[@attribute = 'hello'] 

Для вашего конкретного случая:

<p class="deck">Text here</p> 

Try:

//p[@class = 'deck']/text() 

Это выражение XPath и может быть прочитано как возвращающее последовательность текстового содержимого всех p элементов wit h - класс атрибута, значение которого - «колода».

XSLT использует XPath для навигации по XML-документам, поэтому, возможно, стоит прочитать XPath, а также XSLT.

+0

Я читаю до w3schools прямо сейчас, но у меня возникают трудности с пониманием языка и понятий. их раздел «попробуйте» позволяет мне получить понимание, сделав изменения и увидев, что происходит в результате изменения. Я тоже читаю XPath. – stephenbayer

2

Хм ... Что-то вроде этого, может быть:

<Description> 
    <xsl:choose> 
     <xsl:when test="//p[@class='deck']"> 
      <xsl:value-of select="//p[@class='deck']" /> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:test> </xsl:text> 
     </xsl:otherwise> 
    </xsl:choose> 
</Description> 
Смежные вопросы