A converter o ficheiro XML para outro ficheiro XML com o XSLT
ficheiro XML 1:
<?xml version="1.0"?>
<rentalProperties>
<property contact ="1">
<type>House </type>
<price>420</price>
<address>
<streetNo>1</streetNo>
<street>Wavell Street</street>
<suburb>Box Hill</suburb>
<state>VIC</state>
<zipcode>3128</zipcode>
</address>
<numberOfBedrooms>3</numberOfBedrooms>
<numberOfBathrooms>1</numberOfBathrooms>
<garage>1</garage>
</property>
ficheiro XML 2:
<?xml version="1.0"?>
<rentalProperties>
<property contact ="1">
<type>House </type>
<price>420</price>
<address>1 wavell street,Box Hill,VIC,Australia</address>
<numberOfBedrooms>3</numberOfBedrooms>
<numberOfBathrooms>1</numberOfBathrooms>
<garage>1</garage>
</property>
Como devo converter o ficheiro xml 1 para xml fle 2 usando o xslt? eu quero representar o endereço como a única linha e adicionar um novo atributo [país - Austrália] para o fim da linha. eu fiz o resto . estou a debater-me com a linha de endereços.
ficheiro XSLT:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" type="text/css" href="style.css">
<xsl:template match="/">
<rentalProperties>
<property>
<xsl:attribute name="contact"><xsl:value-of select='@contact'/></xsl:attribute>
<type><xsl:value-of select="type"/></type>
<price><xsl:value-of select="price"/></price>
<numberOfBedrooms><xsl:value-of select="numberOfBedrooms"/></numberOfBedrooms>
<numberOfBathrooms><xsl:value-of select="numberOfBathrooms"/></numberOfBathrooms>
<garage><xsl:value-of select="garage"/></garage>
</property>
</rentalProperties>
</xsl:template>
</xsl:stylesheet>
21
Author: abatishchev, 2011-05-14
4 answers
Esta transformação:
<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:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="address">
<xsl:copy>
<xsl:value-of select=
"concat(streetNo, ' ', street, ',',
suburb,',', state,', Australia')
"/>
</xsl:copy>
</xsl:template>
<xsl:template match="address/node()"/>
</xsl:stylesheet>
Quando aplicado no documento XML fornecido:
<rentalProperties>
<property contact ="1">
<type>House </type>
<price>420</price>
<address>
<streetNo>1</streetNo>
<street>Wavell Street</street>
<suburb>Box Hill</suburb>
<state>VIC</state>
<zipcode>3128</zipcode>
</address>
<numberOfBedrooms>3</numberOfBedrooms>
<numberOfBathrooms>1</numberOfBathrooms>
<garage>1</garage>
</property>
</rentalProperties>
Produz o resultado desejado, correto:
<rentalProperties>
<property contact="1">
<type>House </type>
<price>420</price>
<address>1 Wavell Street,Box Hill,VIC, Australia</address>
<numberOfBedrooms>3</numberOfBedrooms>
<numberOfBathrooms>1</numberOfBathrooms>
<garage>1</garage>
</property>
</rentalProperties>
Explicação : utilizar e anular a regra de identidade.
31
Author: Dimitre Novatchev, 2011-05-14 18:18:54
Pode introduzir um novo modelo para o bloco de endereços usando
<xsl:template match="address">
<xsl:value-of select="streetNo" />
<xsl:text> </xsl:text>
<xsl:value-of select="street" />
<xsl:text>,</xsl:text>
<xsl:value-of select="suburb" />
<xsl:text>,</xsl:text>
<xsl:value-of select="state" />
<xsl:text>,</xsl:text>
<xsl:value-of select="zipcode" />
</xsl:template>
E liga-lhe com
<xsl:apply-templates select="address" />
Antes do elemento <numberOfBedrooms>
. Isto também pode ser feito usando a função concat
, enquanto que a sintaxe correta não me lembro agora.
4
Author: Osiris76, 2011-05-14 15:35:28
Podes tentar algo do género:
<address>
<xsl:for-each select="address/*">
<xsl:value-of select="."/>,
</xsl:for-each>
Australia
</address>
Isto passa por cima de todos os filhos da etiqueta de endereço no xml1.
1
Author: actionshrimp, 2011-05-14 15:30:28
<rentalProperties>
<property contact="1">
<type>House </type>
<price>420</price>
<address>1 Wavell Street,Box Hill,VIC,3128</address>
<numberOfBedrooms>3</numberOfBedrooms>
<numberOfBathrooms>1</numberOfBathrooms>
<garage>1</garage>
</property>
</rentalProperties>
-3
Author: raj, 2016-01-28 16:09:46