es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Concatenar en marc/marcEntry[@label=’Término de Asunto’]

Estoy intentando escribir XSLT para un archivo XML grande que contiene múltiples etiquetas. Me gustaría concatenar términos temáticos y no hay un patrón ya que algunos elementos tienen cero términos temáticos y otros tienen hasta seis.
Intenté concatenar en marc/marcEntry[@label=’Término del tema’, sin embargo, no se carga, por lo que me falta el concepto. Aquí hay un ejemplo del XML y XSLT.

Este es mi intento

<td align='right'><xsl:value-of select="concat(marc/marcEntry[@label='Término del tema'],';;')"></xsl:value-of></td>

XML:

<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='bibtransform.xsl'?>
<report>
<catalog>
<marc>
  <marcentry tag='020' label='ISBN' ind='  '>9780691152660 (pbk.)</marcentry>
  <marcentry tag='020' label='ISBN' ind='  '>0691152667 (pbk.)</marcentry>
  <marcentry tag='100' label='Autor personal' ind='1 '>Langville, Amy N.</marcentry>
  <marcentry tag='245' label='Título' ind='10'>Google's PageRank and beyond : the science of search engine rankings / Amy N. Langville and Carl D. Meyer.</marcentry>
  <marcentry tag='650' label='Término del tema' ind=' 0'>Web search engines.</marcentry>
  <marcentry tag='650' label='Término del tema' ind=' 0'>Web sites--Ratings and rankings--Mathematical models.</marcentry>
  <marcentry tag='650' label='Término del tema' ind=' 0'>Internet searching--Mathematical models.</marcentry>
  <marcentry tag='650' label='Término del tema' ind=' 0'>World Wide Web--Subject access--Mathematical models.</marcentry>
</marc>
<call>
  <callnumber>ZA4226 .L36 2012</callnumber>
  <library>WISSER</library>
  <item>
     <copynumber>1</copynumber>
     <itemid>0195501261646</itemid>
     <library>WISSER</library>
     <librarydescription>Wisser Library</librarydescription>
     <location>STACKS</location>
     <homelocation>STACKS</homelocation>
     <price currency='$'>27.70</price>
     <category1>ETCSC</category1>
     <type>BOOK</type>
     <numberofpieces>1</numberofpieces>
     <datecreated>2012-07-26</datecreated>
     <ispermanent>true</ispermanent>
  </item>
</call>
</catalog>
</report>

XSLT:

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:output method='html'></xsl:output>
<xsl:template match='/'>
<html>
<head>
</head>
<body>
<table border='1'>
<tr bgcolor='#9acd32'>
  <th>Llame al número</th>
  <th>Título</th>
  <th>Autor</th>
  <th>Tema</th>
  <th>ISBN</th>
  <th>ID de artículo</th>
  <th>Hegis</th>
  <th>Copia</th>
  <th>Ubicación</th>
</tr>
<xsl:for-each select='report/catalog'>
<tr>
  <td><xsl:value-of select='call/callNumber'></xsl:value-of></td>
  <td><xsl:value-of select="marc/marcEntry[@label='Título']"></xsl:value-of></td>
  <td align='right'><xsl:value-of select="marc/marcEntry[@label='Autor personal']"></xsl:value-of></td>
  <td align='right'><xsl:value-of select="marc/marcEntry[@label='Término del tema']"></xsl:value-of></td>
  <td align='right'><xsl:value-of select="marc/marcEntry[@label='ISBN']"></xsl:value-of></td>
  <td align='right'><xsl:value-of select='call/item/itemID'></xsl:value-of></td>
  <td><xsl:value-of select='call/item/category1'></xsl:value-of></td>
  <td><xsl:value-of select='call/item/copyNumber'></xsl:value-of></td>
  <td><xsl:value-of select='call/item/homeLocation'></xsl:value-of></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para concatenar términos de temas de un archivo XML grande que contiene múltiples etiquetas, se puede utilizar el siguiente XSLT:

    `
    <xsl:template match="/">
    <html>
    <head> </head>
    <body>
    <table>
    <tr>
    <th> Términos del tema </th>
    </tr>
    <xsl:for-each select="// marc / marcEntry [@ label =' Término del tema ']">
    <tr>
    <td>
    <xsl: value-of="" select="."></xsl:>
    <xsl: if="" test="position ()! = last ()">
    <xsl: text="">;</xsl: text="">
    </xsl: if="">
    </td>
    </tr>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    `

    Esta plantilla recorre cada elemento marcEntry que tiene un atributo label igual a 'Término del tema'. Luego crea una tabla con una columna y una fila para cada marcEntry. El valor de cada marcEntry se agrega a la celda en la fila, y si no es el último marcEntry, también se agrega un punto y coma a la celda. La tabla resultante muestra todos los términos del tema concatenados con puntos y comas.

    Este XSLT asume que el XML de entrada contiene un elemento marc con elementos marcEntry que tienen atributos label iguales a 'Término del tema'. Si la estructura XML de entrada es diferente, es posible que sea necesario modificar el XSLT en consecuencia.

Comments are closed.