首先抱歉,也许这个问题已经提出,但我找不到任何可以帮助我的事情,可能是因为我对XSLT缺乏了解。
我有以下XML:
<xml>
<EstadoRespuesta>
<Error>0</Error>
<Estatus>OK</Estatus>
</EstadoRespuesta>
<NewDataSet>
<Table1>
<Elemento>Cuenta</Elemento>
<Valor>XZY07633</Valor>
</Table1>
<Table1>
<Elemento>Fecha del Balance</Elemento>
<Valor>2016-Nov-18 19:15</Valor>
</Table1>
<Table1>
<Elemento>Balance</Elemento>
<Valor>60.7</Valor>
</Table1>
<Table1>
<Elemento>Lectura</Elemento>
<Valor>2,152.4</Valor>
</Table1>
<Table1>
<Elemento>Suspensión al llegar a</Elemento>
<Valor>2,213.1</Valor>
</Table1>
<Table1>
<Elemento>Fecha aproximada de corte*</Elemento>
<Valor>2017-Jan-04 15:37</Valor>
</Table1>
</NewDataSet>
</xml>
我想改变这个:
<xml>
<EstadoRespuesta>
<Error>0</Error>
<Estatus>OK</Estatus>
</EstadoRespuesta>
<NewDataSet>
<Table1>
<Cuenta>XZY07633</Cuenta>
</Table1>
<Table1>
<FechadelBalance>2016-Nov-18 19:15</FechadelBalance>
</Table1>
<Table1>
<Balance>60.7</Balance>
</Table1>
<Table1>
<Lectura>2,152.4</Lectura>
</Table1>
<Table1>
<Suspensiónalllegara>2,213.1</Suspensiónalllegara>
</Table1>
<Table1>
<Fechaaproximadadecorte>2017-Jan-04 15:37</Fechaaproximadadecorte>
</Table1>
</NewDataSet>
</xml>
我用过这个:
<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="/*">
<records>
<xsl:apply-templates/>
</records>
</xsl:template>
<xsl:template match="NewDataSet">
<record>
<xsl:apply-templates/>
</record>
</xsl:template>
<xsl:template match="Table1">
<record>
<xsl:apply-templates/>
</record>
</xsl:template>
<xsl:template match="Elemento">
<xsl:attribute name="local-name(.)">
<xsl:value-of select="Valor"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
但我并不愿意得到我需要的东西。 有人可以给我一些建议/帮助吗? 提前谢谢。
答案 0 :(得分:1)
以这种方式尝试:
XSLT 1.0
<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:strip-space elements="*"/>
<xsl:variable name="valid-chars">abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.</xsl:variable>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Table1">
<xsl:copy>
<xsl:element name="{translate(Elemento, translate(Elemento, $valid-chars, ''), '')}">
<xsl:value-of select="Valor"/>
</xsl:element>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
注意强>:
您需要将要保留的字符(例如ó
)添加到有效字符列表中。
即使在过滤无效字符后,输入仍可能是无效的XML元素名称(例如,如果以数字开头)。
答案 1 :(得分:1)
XSLT 1.0解决方案将是:
<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="/xml">
<xml>
<xsl:copy-of select="EstadoRespuesta" />
<NewDataSet1>
<xsl:apply-templates select="NewDataSet" />
</NewDataSet1>
</xml>
</xsl:template>
<xsl:template match="Table1">
<Table1>
<xsl:element name="{translate(Elemento,' *ó','')}">
<xsl:value-of select="Valor" />
</xsl:element>
</Table1>
</xsl:template>
</xsl:stylesheet>
结果是
<xml>
<EstadoRespuesta>
<Error>0</Error>
<Estatus>OK</Estatus>
</EstadoRespuesta>
<NewDataSet1>
<Table1>
<Cuenta>XZY07633</Cuenta>
</Table1>
<Table1>
<FechadelBalance>2016-Nov-18 19:15</FechadelBalance>
</Table1>
<Table1>
<Balance>60.7</Balance>
</Table1>
<Table1>
<Lectura>2,152.4</Lectura>
</Table1>
<Table1>
<Suspensinalllegara>2,213.1</Suspensinalllegara>
</Table1>
<Table1>
<Fechaaproximadadecorte>2017-Jan-04 15:37</Fechaaproximadadecorte>
</Table1>
</NewDataSet1>
</xml>
尽管如此,你必须将所有非QName个字符添加到翻译表达式的第二个参数
翻译(Elemento,'*ó','')
在XSLT文件中。