混淆地将XML从一种格式转换为另一种格式



我需要将消息数据从一种格式转换为另一种格式。原始文件有 3472 个条目(短信/短信)。id,threadId,person将不再需要。但我必须创造@time,@name。

我拥有的格式:

<?xml version='1.0' encoding='UTF-8'?>
<smsall>
<sms>
<id>200</id>
<threadId>65</threadId>
<address>+123456789</address>
<person>1</person>
<date>1387977340608</date>
<body> This is a text </body>
<type>1</type>
<read>1</read>
</sms>
</smsall>

运行 XSLT 1.0 后我需要的格式:

<?xml version="1.0" encoding="UTF-8"?>
<allsms count="1">
<sms address="+123456789" time="" date="1387977340608" type="1" body="This is a text" read="1" service_center="" name="" />
</allsms>

我花了很多天,但我失败得很惨。请问谁能帮我?

这个问题不是很复杂,但你必须记住两个细节:

首先:XSLT 1.0xsl:attribute的语法不允许select属性。相反,您必须使用此标签的内容,例如:

<xsl:attribute name="address">
<xsl:value-of select="address"/>
</xsl:attribute>

第二个:要有一个内容为空的属性,就足够了 放置仅使用名称xsl:attribute,但没有任何内容,例如:

<xsl:attribute name="time"/>

因此,脚本可能如下所示:

<?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" encoding="UTF-8" indent="yes" />
<xsl:template match="smsall">
<allsms>
<xsl:attribute name="count">
<xsl:value-of select="count(sms)"/>
</xsl:attribute>
<xsl:apply-templates/>
</allsms>
</xsl:template>
<xsl:template match="sms">
<sms>
<xsl:attribute name="address">
<xsl:value-of select="address"/>
</xsl:attribute>
<xsl:attribute name="time"/>
<xsl:attribute name="date">
<xsl:value-of select="date"/>
</xsl:attribute>
<xsl:attribute name="type">
<xsl:value-of select="type"/>
</xsl:attribute>
<xsl:attribute name="body">
<xsl:value-of select="normalize-space(body)"/>
</xsl:attribute>
<xsl:attribute name="read">
<xsl:value-of select="read"/>
</xsl:attribute>
<xsl:attribute name="service_center"/>
<xsl:attribute name="name"/>
</sms>
</xsl:template>
</xsl:stylesheet>

有关工作示例(在 XSLT 1.0中),请参见 http://xsltransform.net/nb9MWsZ

相关内容

  • 没有找到相关文章

最新更新