2013-12-13 3 views
-1

Учитывая следующие примеры входных и выходных XML-документов, напишите программу XSLT , которая будет трансформироваться между ними. Вывод - это HTML-документ.! !Проблемы с созданием XSLT

Пример ввода XML-документа :!

<library name="Library Name 1" address="Address">! 
    <libraryItems>! 
    <libraryItem type="book" id="123" isbn="123" title="Title1" summary="Summary1"! 
    publisher="Publisher1" published="1/2/12" barcode="Code1" 
      rfid="RFID1" added="1/2/12">! 
     <author name="Author Name1"/>! 
     </libraryItem>! 
    ! ...any number of items of type book...! 
     <libraryItem type="cd" id="345" title="Title3" tracks="Tracks1" genre="Genre1"! 
    ! barcode="Code3" rfid="RFID3" added="1/2/12"/>! 
    ! ...any number of items of type cd...! 
    </libraryItems>! 
    <accounts>! 
    <account number="234" state="ACTIVE">! 
     <patron firstName="Firstname1" lastName="Lastname1" address="Address1"/>! 
    <borrows item="123"/>! 
    ! ...any number of borrows...! 
     </account>! 
     ! ...any number of accounts...! 
    </accounts>! 
     </library>! ! 

Образец для выпуска HTML-документ :!

<h1>Borrowed Items</h1>! 
<table><tr>! <th>Library</th><th>Patron</th><th>Borrowing</th>! </tr>! 
! <tr>! <td>Library Name 1</td><td>Firstname1 Lastname1</td><td>Title1</td></tr>! 
! <tr>! <td>Library Name 1</td><td>Firstname2 Lastname2</td><td>Title2</td></tr>! 
! ...one row for every borrowed item...! 
</table> 

Это решение, которое дало три ошибки:

 <?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
    <html> 
    <body> 
<h1>Borrowed Items</h1>! 
<table> 
<tr>! 
<th>Library</th> 
<th>Patron</th> 
<th>Borrowing</th>! 
</tr>! 

<xsl:for-each select="//library/libraryitems/libraryitem | //library/accounts/account"> 

<tr> 
<td>library name 1</td>  
    <td><xsl:value-of select="firstName"/><xsl:value-of select="lastName"/></td> 
    <td><xsl:value-of select="title"/></td> </tr> 
</xsl:for-each> 
</table> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

Какие коррективы я должен сделать?

+0

В чем вопрос? –

+0

напишите программу XSLT, которая будет трансформироваться между ними. – vitasta

+2

Это ** задача **, а не вопрос. –

ответ

0

Одна из проблем в этом решении заключается в том, как вы получаете доступ к атрибуту тега XML, XSL использует XPath для навигации по структуре XML, которая очень похожа на синтаксис файловой системы nav, представьте, что вы находитесь в каталоге, и вы хотите идти вверх или вниз по пути. когда у вас есть атрибут, вам нужно поместить @attributeName, чтобы имя было фактически @firstName, но вы должны быть в правильном теге.

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

Посмотрите на решение ниже:

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

<xsl:key name="title" match="libraryItem" use="@id"/> 
<xsl:template match="/"> 
    <html> 
    <body> 
    <h1>Borrowed Items</h1> 
    <table border="1"> 
    <tr bgcolor="#9acd32"> 
     <th>Library</th> 
     <th>Patron</th> 
     <th>Borrowing</th> 
    </tr> 
     <xsl:for-each select="library/accounts/account"> 
      <xsl:for-each select="borrows"> 
       <tr> 
        <td><xsl:value-of select="../../../@name"/></td> 
        <td><xsl:value-of select="../patron/@firstName"/><xsl:text> </xsl:text><xsl:value-of select="../patron/@lastName"/></td> 
        <td><xsl:value-of select="key('title', @item)/@title"/></td> 
       </tr> 
      </xsl:for-each> 
     </xsl:for-each>  
    </table> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 
0

вы пытались решить эту проблему? Если да, вы можете поделиться тем, как и мы можем вести вас по пути, если не

XSLT не так уж трудно, это в основном CSS для XML, вы должны посмотреть здесь для начала: http://www.w3schools.com/xsl/default.asp

и здесь, если вы не знакомы с xpath: http://www.w3schools.com/xpath/

А затем уточните свой вопрос для получения более конкретного ответа.

+0

Я не могу понять, как это реализовать, используя узлы или таблицу – vitasta

+0

. Он работает следующим образом: у вас есть XML-вход, и у вас есть XSL-файл. Вы свяжете XSL-файл с вашим XML, как описано в первой ссылке. XSL-файл имеет право преобразовывать XML во что угодно. Так что в вашем случае HTM. Начните с связывания своего пустого XSL-файла с вашим XML и просмотра браузера thr, вы увидите пустую страницу, затем постепенно добавьте свои вещи, создайте шаблон (проверьте ссылку) в XSL-файле, а затем сначала добавьте тело HTML + + h1 tag просматривает результат и продолжает постепенно добавлять материал, пока у вас не будет того, что вы ищете. XSLT действительно забавна, как только вы это понимаете! – Fawix

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