Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 创建XSLT的问题_Html_Xslt - Fatal编程技术网

Html 创建XSLT的问题

Html 创建XSLT的问题,html,xslt,Html,Xslt,给出以下输入和输出XML文档的示例,编写一个XSLT 将在它们之间转换的程序。输出是一个HTML文档 示例输入XML文档: <library name="Library Name 1" address="Address">! <libraryItems>! <libraryItem type="book" id="123" isbn="123" title="Title1" summary="Summary1"! publisher="Publi

给出以下输入和输出XML文档的示例,编写一个XSLT 将在它们之间转换的程序。输出是一个HTML文档

示例输入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>! !
<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>
!
!
!
!
!
! ...任何数量的图书类型。。。!
!
! ...任何数量的cd类型的项目。。。!
!
!
!
!
!
! ...任何数量的借款。。。!
!
! ...任何数量的帐户。。。!
!
! !
示例输出HTML文档:

  <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>! !
<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>
借来的物品!
! 图书馆借阅!
! ! 库名1firstname1lastname1title1!
! ! 库名1firstname2lastname2title2!
! ...每借一件物品一行。。。!
此解决方案出现了三个错误:

      <?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>

借来的东西!
! 
图书馆
资助者
借钱!
!
图书馆名称1

我应该做哪些更正?

该解决方案的一个问题是如何访问XML标记属性,XSL用于导航XML结构,这与文件系统nav语法非常相似,假设您在一个目录中,并且希望沿着路径上下移动。当你有一个属性的时候,你需要把@attributeName放进去,这样名字实际上就是@firstName,但是你需要在正确的标记中

此外,当您必须将借用的ID与标题ID进行匹配时,您只需使用“..”返回,然后导航到所需的libraryItem,对于匹配,我发现最好使用“key”标记

请查看以下解决方案:

<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>

借来的物品
图书馆
资助者
借用

您尝试过解决它吗?如果是,您可以分享方法,如果不是,我们可以指导您

XSLT并没有那么难,它基本上是XML的CSS,您应该在这里了解一下初学者:

如果您不熟悉xpath,请点击这里:


然后细化您的问题,以获得更具体的答案。

这里的问题是什么?编写一个XSLT程序,在它们之间进行转换。这是一项任务,而不是一个问题。我无法理解如何实现它,是使用节点还是表。它的工作方式是:您有XML输入,您有一个XSL文件。您将按照第一个链接中解释的方式将XSL文件链接到XML。XSL文件具有将XML转换为任何您想要的格式的能力。所以在你的情况下。首先将空XSL文件链接到XML并在浏览器上查看,您将看到一个空页面,然后逐步添加内容,在XSL文件中创建一个模板(检查链接),然后首先添加HTML+body+h1标记查看结果并继续逐步添加内容,直到找到所需内容。一旦您理解了XSLT,它实际上是很有趣的!