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>
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 atributolabel
igual a'Término del tema'
. Luego crea una tabla con una columna y una fila para cadamarcEntry
. El valor de cadamarcEntry
se agrega a la celda en la fila, y si no es el últimomarcEntry
, 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 elementosmarcEntry
que tienen atributoslabel
iguales a'Término del tema'
. Si la estructura XML de entrada es diferente, es posible que sea necesario modificar el XSLT en consecuencia.