XSL模板,一些数据没有被提取

时间:2009-12-23 15:39:49

标签: xml xslt

我试图通过XSLT在html中显示xml数据。

我正在构建一个简单的html表,显示名称,地址和&电话号码。

XSL模板提取名称&电话号码,但由于某种原因,它不会获取地址。

<?xml-stylesheet type="text/xsl" href="testreport.xsl"?>
<BpsReportResponse>
   <Individual>
      <HistoricalNeighbors>
        <Neighborhood>
            <NeighborAddresses>
               <NeighborAddress>
                  <Address>
                     <StreetName>SOMESTREET</StreetName>
                     <City>SOMECITY</City>
                     <County>SOMECOUNTY</County>
                     <State>NJ</State>
                     <StreetNumber>999</StreetNumber>
                     <Zip5>00000</Zip5>
                     <Zip4>0000</Zip4>
                     <StreetSuffix>ST</StreetSuffix>
                  </Address>
                  <DateLastSeen>
                     <Year>2008</Year>
                  </DateLastSeen>
                  <DateFirstSeen>
                     <Month>3</Month>
                     <Year>1996</Year>
                  </DateFirstSeen>
                  <Residents>
                     <Identity>
                        <Name>
                           <Last>DOE</Last>
                           <First>JANE</First>
                        </Name>
                        <UniqueId>00000000000</UniqueId>
                     </Identity>
                  </Residents>
                  <LocationId></LocationId>
                  <Phones>
                     <Phone>
                        <Phone10>9999999999</Phone10>
                     </Phone>
                  </Phones>
               </NeighborAddress>               
            </NeighborAddresses>
         </Neighborhood>
      </HistoricalNeighbors>
   </Individual>   
</BpsReportResponse>

testreport.xsl

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="BpsReportResponse/Individual"> 
    <html>
    <head>
        <link rel="stylesheet" type="text/css" href="stylesheet.css" />

    </head>
    <body> 

        <div id="neighbors">
            <table>
                <tr class="header"><td colspan="3">Neighbors</td></tr>
                <tr class="subheader">
                    <td>Name</td>
                    <td>Address</td>
                    <td>Phone</td>
                </tr>
                <xsl:for-each select="HistoricalNeighbors/Neighborhood/NeighborAddresses/NeighborAddress">
                    <tr>                        
                        <td>                            
                            <xsl:value-of select="Residents/Identity/Name/First"/>&#160;<xsl:value-of select="Residents/Identity/Name/Middle"/>&#160;<xsl:value-of select="Residents/Identity/Name/Last"/> 
                        </td>
                        <td>                    
                            <xsl-value-of select="Address/StreetNumber"/>&#160;<xsl-value-of select="Address/StreetName"/>&#160;<xsl-value-of select="Address/StreetSuffix"/>, 
                            <xsl-value-of select="Address/City"/>,&#160;<xsl-value-of select="Address/State"/>&#160;<xsl-value-of select="Address/Zip5"/>
                        </td>
                        <td><xsl:value-of select="Phones/Phone/Phone10"/></td>
                    </tr>
                </xsl:for-each>
            </table>
        </div>

    </body>
    </html>     
</xsl:template>
</xsl:stylesheet>

4 个答案:

答案 0 :(得分:3)

您为地址元素执行了xsl-value-of而不是xsl:value-of。

从Sourceforge获取Xselerator,这是一个很棒的工具来做这样的事情。我复制并粘贴你的东西,我立即看到了错误。

答案 1 :(得分:0)

你会打砖块:

变化:

<xsl-value-of select="Address/StreetNumber"/>

代表

<xsl:value-of select="Address/StreetNumber"/>

答案 2 :(得分:0)

请注意,<xsl-value-of ...>不是正式错误,它不是您想要的!它简单地被XSLT视为另一个输出元素,如果你查看输出,你会看到它和select属性! XSLT假设你的意思是你输入的内容 - 如果因为输入错误而没有结果,那么XSLT不做任何评论 - 为什么要这样做。这意味着它大部分时间都会优雅地失败,但往往是默默无闻。

答案 3 :(得分:0)

visual studio也是xslt的一个很好的编辑器,它显示了所有错误,因此更容易找到错误。