Шаблон XSL, некоторые данные не извлекаются - PullRequest
0 голосов
/ 23 декабря 2009

Я пытаюсь отобразить данные XML в формате html через XSLT.

Я создаю простую 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 ]

3 голосов
/ 23 декабря 2009

Вы сделали xsl-value-of вместо xsl: value-of для элементов адреса.

Иди и получи Xselerator от Sourceforge, это замечательный инструмент для подобных вещей. Я скопировал и вставил в него ваши вещи и сразу увидел ошибку.

0 голосов
/ 23 декабря 2009

Visual Studio также является хорошим редактором для xslt, он показывает все ошибки, поэтому поиск ошибок становится намного проще.

0 голосов
/ 23 декабря 2009

Обратите внимание, что <xsl-value-of ...> не является формальной ошибкой, это просто не то, что вы хотели! XSLT просто воспринимает его как другой элемент вывода, и если вы посмотрите на вывод, то увидите его там вместе с атрибутом select! XSLT предполагает, что вы имеете в виду то, что вводите - если вы не получили результатов, потому что вы ввели что-то неправильно, то XSLT не дает комментариев - зачем это нужно. Это означает, что большую часть времени он терпит неудачу, но часто молча.

0 голосов
/ 23 декабря 2009

Ты будешь * кирпичей

Изменение:

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

для

<xsl:value-of select="Address/StreetNumber"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...