我正在开发一个项目,团队伙伴生成了一个与我的代码不兼容的XML文件,我想使用XSLT转换XML文件。我想转换这个XML
<frame>
<frameNo>0</frameNo>
<objectlist>
<object>
<confidence>0.95</confidence>
<box>
<h>775</h>
<w>202</w>
<xc>509</xc>
<yc>8.6</yc>
</box>
</object>
<object>
<confidence></confidence>
<box>
<h>966</h>
<w>220</w>
<xc>1779</xc>
<yc>1080</yc>
</box>
</object>
</objectlist>
</frame>
到此XML文件
<frame number="0">
<objectlist>
<object confidence = "0.95">
<box h="775" w="202" xc="509" yc="8.68"/>
</object>
<object confidence = "0.50">
<box h="996" w="220" xc="1779" yc="1080" />
</object>
</objectlist>
</frame>
任何人都可以帮我转换这个xml使用XSLT。
答案 0 :(得分:0)
虽然这个论坛不适用于此类问题,但我愿意为您提供解决方案,因为您赶时间。
您需要从中学到的另一个重要教训是,XML在您和您的队友之间充当API。您之前应该已经讨论过这个问题,以防止您现在遇到的不一致。
您需要的XSLT是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="frame">
<xsl:element name="frame">
<xsl:attribute name="number">
<xsl:value-of select="frameNo" />
</xsl:attribute>
<xsl:apply-templates select="objectlist" />
</xsl:element>
</xsl:template>
<xsl:template match="objectlist">
<xsl:element name="objectlist">
<xsl:apply-templates select="./object" />
</xsl:element>
</xsl:template>
<xsl:template match="object">
<xsl:element name="object">
<xsl:attribute name="confidence">
<xsl:if test="normalize-space(confidence) != '' ">
<xsl:value-of select="confidence" />
</xsl:if>
<xsl:if test="normalize-space(confidence) = '' ">
<xsl:text>0.50</xsl:text>
</xsl:if>
</xsl:attribute>
<xsl:apply-templates select="./*[not(self::confidence)]" />
</xsl:element>
</xsl:template>
<xsl:template match="box">
<xsl:element name="box">
<xsl:for-each select="*">
<xsl:attribute name="{name()}" >
<xsl:value-of select="text()" />
</xsl:attribute>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我希望你能花时间研究它,以便你理解它。