Таблица стилей XSL - получение таблицы с донорами - PullRequest
2 голосов
/ 31 июля 2011

Я борюсь с этим.У меня есть два листа XML, которые я хочу отображать информацию из обоих.Один лист XML содержит пожертвования, а другой - доноров и их информацию.Я хотел бы создать таблицу, в которой есть их контактная информация и сумма, которую они пожертвовали.Таблица с именем донора и контактной информацией с другой ячейкой рядом с той, которая включает сумму, которую они пожертвовали.

<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:key name="donation" match="donation"   use="."/>
<xsl:variable name="people" select="document('people.xml')"/>
<xsl:variable name="money" select="document('money.xml')"/>
<xsl:key name="personid" use="@pid" match="person"/>
<xsl:template match="/">
<html>
<head>
<title>The Light House</title>
</head>
<body>
<h2>The Lighthouse Donation List</h2>
</body>
</html>
<table>
<tr>
<th colspan="5">Donor</th>
<th colspan="5">Donation</th>
</tr>
<tr>
<td colspan="5">
</td>
<td colspan="5">
</td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>

Вот деньги.xml

<?xml-stylesheet type="text/xsl" href="money.xsl" ?>
<donations>
<donation pin="p1" amount="10000" />
<donation pin="p2" amount="50" />
<donation pin="p3" amount="100" />
<donation pin="p4" amount="10000" />
</donations>

Вот доноры

<persons>
<person pid="p1">
<firstName>David</firstName>
<lastName>Olson</lastName>
<street>5133 Oak Street</street>
<city>Delphi</city>
<state>KY</state>
<zip>89011</zip>
<phone>(532) 555-8981</phone>
</person>
<person pid="p2">
<firstName>Cindy</firstName>
<lastName>Wu</lastName>
<street>31 Alice Avenue</street>
<city>Delphi</city>
<state>KY</state>
<zip>89011</zip>
<phone>(532) 555-7212</phone>
</person>
<person pid="p3">
<firstName>Lee</firstName>
<lastName>Thomas</lastName>
<street>451 Unwin Court</street>
<city>Jasper</city>
<state>KY</state>
<zip>89381</zip>
<phone>(534) 555-9082</phone>
</person>
<person pid="p4">
<firstName>Jane</firstName>
<lastName>Whitney</lastName>
<street>87 Hilltop Drive</street>
<city>Jasper</city>
<state>KY</state>
<zip>89381</zip>
<phone>(534) 555-7493</phone>
</person>
    </person>

1 Ответ

1 голос
/ 31 июля 2011

Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="ppathPersons" select=
  "'file:///c:/temp/delete/persons.xml'"/>

 <xsl:param name="ppathDonations" select=
  "'file:///c:/temp/delete/donations.xml'"/>

 <xsl:variable name="vPersons"
   select="document($ppathPersons)"/>

 <xsl:variable name="vDonations"
   select="document($ppathDonations)"/>

 <xsl:template match="/">
  <html>
   <table>
     <xsl:apply-templates select="$vPersons/*/person"/>
   </table>
  </html>
 </xsl:template>

 <xsl:template match="person">
  <tr>
   <td colspan="5">
    <xsl:value-of select="concat(firstName, ' ', lastName)"/>
   </td>
   <td colspan="5">
    <xsl:value-of select=
     "$vDonations/*/*[@pin = current()/@pid]/@amount"/>
   </td>
  </tr>
 </xsl:template>
</xsl:stylesheet>

при применении к любому документу XML (игнорируется / не используется), приводит к желаемому, правильному результату :

<html>
   <table>
      <tr>
         <td colspan="5">David Olson</td>
         <td colspan="5">10000</td>
      </tr>
      <tr>
         <td colspan="5">Cindy Wu</td>
         <td colspan="5">50</td>
      </tr>
      <tr>
         <td colspan="5">Lee Thomas</td>
         <td colspan="5">100</td>
      </tr>
      <tr>
         <td colspan="5">Jane Whitney</td>
         <td colspan="5">10000</td>
      </tr>
   </table>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...