Я очень новичок в XSL, и я оказался в этой проблеме.
У меня есть этот XML:
<?xml version="1.0"?>
<OrdenPP10>
<Puente>
<FOL_LIQ>43110847</FOL_LIQ>
<FOLIO_PISA>014050869</FOLIO_PISA>
<TIPO_TAREA>TV1LPBD</TIPO_TAREA>
<TELEFONO>0015177534</TELEFONO>
<DISPOSITIVO>31000039178</DISPOSITIVO>
<PDG>39D010</PDG>
<ID_CABLE>IT_0452</ID_CABLE>
<PAR>21</PAR>
<ID_CABLE2>IT_0160H3</ID_CABLE2>
<PAR2>8</PAR2>
<DSLAM>MXIZ19</DSLAM>
<REMATE_ENT>IT_65K145</REMATE_ENT>
<REMATE_SAL>IT_65L145</REMATE_SAL>
<GRUPO_ADSL>IT_17249</GRUPO_ADSL>
<WRSTAT>ASSIGN</WRSTAT>
<WIRECENTER>IT_</WIRECENTER>
</Puente>
<Puente>
<FOL_LIQ>43107691</FOL_LIQ>
<FOLIO_PISA>014052710</FOLIO_PISA>
<TIPO_TAREA>TV1LPBD</TIPO_TAREA>
<TELEFONO>0054213416</TELEFONO>
<DISPOSITIVO>31000043242</DISPOSITIVO>
<PDG>43C106</PDG>
<ID_CABLE>IT_0299</ID_CABLE>
<PAR>39</PAR>
<ID_CABLE2>IT_0084F4</ID_CABLE2>
<PAR2>6</PAR2>
<DSLAM>ME19</DSLAM>
<REMATE_ENT>IT_65K151</REMATE_ENT>
<REMATE_SAL>IT_65L151</REMATE_SAL>
<GRUPO_ADSL>IT_17255</GRUPO_ADSL>
<WRSTAT>ASSIGN</WRSTAT>
<WIRECENTER>IT_</WIRECENTER>
</Puente>
<Puente>
<FOL_LIQ>43107685</FOL_LIQ>
<FOLIO_PISA>014052644</FOLIO_PISA>
<TIPO_TAREA>TV1LPBD</TIPO_TAREA>
<TELEFONO>5556101551</TELEFONO>
<DISPOSITIVO>31000032271</DISPOSITIVO>
<PDG>32F015</PDG>
<ID_CABLE>IT_0134A</ID_CABLE>
<PAR>25</PAR>
<ID_CABLE2>IT_0056M2</ID_CABLE2>
<PAR2>9</PAR2>
<DSLAM>MXIZ93</DSLAM>
<REMATE_ENT>IT_11Q077</REMATE_ENT>
<REMATE_SAL>IT_11R077</REMATE_SAL>
<GRUPO_ADSL>IT_03613</GRUPO_ADSL>
<WRSTAT>ASSIGN</WRSTAT>
<WIRECENTER>IT_</WIRECENTER>
</Puente>
</OrdenPP10>
и этот незавершенный XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="filas" select="ceiling(count(//Puente) div 7)"></xsl:variable>
<xsl:template match="/">
<html>
<head>
<style type="text/css">
.primerdiv{
clear:left;
float:left;
}
.borde{
border: 1px solid black;
}
.letra{
font-family:Arial;
font-size:7pt;
}
.lbold{
font-family:Arial;
font-size:7pt;
font-weight: bold;
}
.paddingptes{
padding: 2px 2px 2px 2px;
text-align:left;
height: 20px;
width: 100%;
vertical-align:center;
}
.altbordeptes{
border-right:1px solid black;
}
</style>
</head>
<body>
<div class="borde">
<div class="lbold" style="width: 99%">
<div style="float:left; align:center; width:32%"> </div>
<div style="float:left; text-align:center; vertical-align:top; width:32%">HEADER
<br/>BLAH
<br/>BLAH BLAH
<br/><hr/>
</div>
<div class="lbold empltitulo" style="float:left; text-align:right; vertical-align:top; width:35%;">FECHA: <xsl:value-of select="$para-font-size"/></div>
<div class="primerdiv letra" style="width:10%" >TECNICO: </div>
<div class="letra" style="float:left; width:79.9%"> </div>
<div class="letra" style="float:left; width:10%">COPE: </div>
<div class="primerdiv" style="width:99%;"><hr/></div>
</div>
<div class="primerdiv altbordeptes" style="width:12.3%; border-left: 1px solid black;">
<div class="primerdiv">
<div class="primerdiv lbold paddingptes">
F PISAPLEX:
</div>
<div class="primerdiv lbold paddingptes">
FOLIO PISA:
</div>
<div class="primerdiv lbold paddingptes">
TIPO TAREA:
</div>
<div class="primerdiv lbold paddingptes">
TELEFONO:
</div>
<div class="primerdiv lbold paddingptes">
DISPOSITIVO:
</div>
<div class="primerdiv lbold paddingptes">
PDG:
</div>
<div class="primerdiv lbold paddingptes">
ID CABLE:
</div>
<div class="primerdiv lbold paddingptes">
PAR:
</div>
<div class="primerdiv lbold paddingptes">
DSLAM:
</div>
<div class="primerdiv lbold paddingptes">
REMATE ENT.:
</div>
<div class="primerdiv lbold paddingptes">
REMATE SAL.:
</div>
<div class="primerdiv lbold paddingptes">
GRUPO ADSL:
</div>
<div class="primerdiv lbold paddingptes">
R ENT VID:
</div>
<div class="primerdiv lbold paddingptes">
R SAL VID:
</div>
<div class="primerdiv lbold paddingptes">
DSLAM ORIGEN:
</div>
<div class="primerdiv lbold paddingptes">
R ENT ORIGEN:
</div>
<div class="primerdiv lbold paddingptes">
R SAL ORIGEN:
</div>
<div class="primerdiv lbold paddingptes">
DSLAM DESTINO:
</div>
<div class="primerdiv lbold paddingptes">
R ENT DESTINO:
</div>
<div class="primerdiv lbold paddingptes">
R SAL DESTINO:
</div>
<div class="primerdiv lbold paddingptes">
ANCHO BANDA:
</div>
</div>
</div>
<xsl:for-each select="OrdenPP10/Puente">
<div class="altbordeptes" style="float:left; width:12.3%;">
<div class="primerdiv">
<div class="primerdiv letra paddingptes">
<xsl:value-of select="FOL_LIQ"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="FOLIO_PISA"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="TIPO_TAREA"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="TELEFONO"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="DISPOSITIVO"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="PDG"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="ID_CABLE"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="PAR"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="DSLAM"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="REMATE_ENT"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="REMATE_SAL"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="GRUPO_ADSL"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="REntVid"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="RSalVid"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="DSLAMOrig"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="REntOrigen"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="RSalOrigen"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="DSLAMDestino"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="REntDestino"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="RSalDestino"/>
</div>
<div class="primerdiv letra paddingptes">
<xsl:value-of select="AnchoBanda"/>
</div>
</div>
</div>
</xsl:for-each>
<div style="clear:left;" width=100%>
<hr />
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Дело до сих пор довольно просто: с каждым из них я могу проанализировать XML, чтобы получить все данные в столбцы и превратить файл в несколько аккуратный HTML. Но проблема в том, что я могу получить XML с 1 Puente, 3, 20, 40 или 80.
Итак, вот вопрос: есть ли способ отформатировать этот XSL, чтобы получить не более 7 Puente by div и отдохнуть в другом div (s) ниже, учитывая, что первый div должен быть тем, у кого есть заголовки?
Я делал то же самое в коде С# (с обычными таблицами HTML) много времени назад, и это было очень просто (используя mod и т.п., Чтобы сделать tr s и td s), и хотя у меня уже есть количество требуемые строки (по функции в верхней части XSL), я до сих пор не знаю, как создавать динамические строки и не использовать, опять же, для каждого.
Это звучит как работа. Но вся документация, которую я мог найти, была для вышеупомянутого для каждого. Если бы вы могли направить меня к решению, было бы очень приятно.
Пожалуйста, помните, что я новичок. Клянусь, я много читал об этом, но не нашел (число) решений (я), к которым я могу обратиться.
Заранее спасибо, Тонио.
Начните новую "таблицу" для каждого Puente[position() mod 7 = 1]
и создайте "строки" для . | following-sibling::Puente[position() < 7]
. | following-sibling::Puente[position() < 7]
. | following-sibling::Puente[position() < 7]
(то есть я и следующие 6 братьев и сестер).
Вот простой пример. Использование минимального ввода и результата таблицы:
<OrdenPP10>
<Puente>
<FOL_LIQ>001</FOL_LIQ>
<FOLIO_PISA>014050869</FOLIO_PISA>
</Puente>
<Puente>
<FOL_LIQ>002</FOL_LIQ>
<FOLIO_PISA>014052710</FOLIO_PISA>
</Puente>
<Puente>
<FOL_LIQ>003</FOL_LIQ>
<FOLIO_PISA>014052644</FOLIO_PISA>
</Puente>
<Puente>
<FOL_LIQ>004</FOL_LIQ>
<FOLIO_PISA>014050869</FOLIO_PISA>
</Puente>
<Puente>
<FOL_LIQ>005</FOL_LIQ>
<FOLIO_PISA>014052710</FOLIO_PISA>
</Puente>
<Puente>
<FOL_LIQ>006</FOL_LIQ>
<FOLIO_PISA>014052644</FOLIO_PISA>
</Puente>
<Puente>
<FOL_LIQ>007</FOL_LIQ>
<FOLIO_PISA>014050869</FOLIO_PISA>
</Puente>
<Puente>
<FOL_LIQ>008</FOL_LIQ>
<FOLIO_PISA>014052710</FOLIO_PISA>
</Puente>
<Puente>
<FOL_LIQ>009</FOL_LIQ>
<FOLIO_PISA>014052644</FOLIO_PISA>
</Puente>
</OrdenPP10>
Применение следующей таблицы стилей:
XSLT 1.0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/OrdenPP10">
<table border="1">
<xsl:for-each select="Puente[position() mod 7 = 1]" >
<thead>
<tr>
<th>Title</th>
<th>Text</th>
</tr>
</thead>
<tbody>
<xsl:apply-templates select=". | following-sibling::Puente[position() < 7]"/>
</tbody>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="Puente">
<tr>
<td><xsl:value-of select="FOL_LIQ"/></td>
<td><xsl:value-of select="FOLIO_PISA"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
приведет к:
<?xml version="1.0" encoding="UTF-8"?>
<table border="1">
<thead>
<tr>
<th>Title</th>
<th>Text</th>
</tr>
</thead>
<tbody>
<tr>
<td>001</td>
<td>014050869</td>
</tr>
<tr>
<td>002</td>
<td>014052710</td>
</tr>
<tr>
<td>003</td>
<td>014052644</td>
</tr>
<tr>
<td>004</td>
<td>014050869</td>
</tr>
<tr>
<td>005</td>
<td>014052710</td>
</tr>
<tr>
<td>006</td>
<td>014052644</td>
</tr>
<tr>
<td>007</td>
<td>014050869</td>
</tr>
</tbody>
<thead>
<tr>
<th>Title</th>
<th>Text</th>
</tr>
</thead>
<tbody>
<tr>
<td>008</td>
<td>014052710</td>
</tr>
<tr>
<td>009</td>
<td>014052644</td>
</tr>
</tbody>
</table>
отображается как:
Я больше пыталась переставить таблицу.
То же самое, возможно, даже проще:
XSLT 1.0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/OrdenPP10">
<table border="1">
<xsl:for-each select="Puente[position() mod 7 = 1]" >
<tr>
<th>Title<br/>Text</th>
<xsl:apply-templates select=". | following-sibling::Puente[position() < 7]"/>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="Puente">
<td>
<xsl:value-of select="FOL_LIQ"/>
<br/>
<xsl:value-of select="FOLIO_PISA"/>
</td>
</xsl:template>
</xsl:stylesheet>
Результат:
<xsl:for-each select="OrdenPP10/Puente"> <xsl:choose> <xsl:when Puente[position() mod 7 = 1]> <!--new row--> </xsl:when> <xsl:otherwise> <!-- keep doing while .|following-sibling::Puente[position() < 7] --> </xsl:otherwise> </xsl:choose> </xsl:for-each>
?