Xml 重用XSL模板以使用不同的相对XPath调用
这是我精心设计的例子,说明了我正在努力实现的目标。我有一个输入XML文件,希望将其展平以便进一步处理 输入文件:Xml 重用XSL模板以使用不同的相对XPath调用,xml,xslt,Xml,Xslt,这是我精心设计的例子,说明了我正在努力实现的目标。我有一个输入XML文件,希望将其展平以便进一步处理 输入文件: <BICYCLES> <BICYCLE> <COLOR>BLUE</COLOR> <WHEELS> <WHEEL> <WHEEL_TYPE>FRONT</WHEEL_TYPE>
<BICYCLES>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEELS>
<WHEEL>
<WHEEL_TYPE>FRONT</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTORS>
<REFLECTOR>
<REFLECTOR_NUM>1</REFLECTOR_NUM>
<SHAPE>SQUARE</SHAPE>
</REFLECTOR>
<REFLECTOR>
<REFLECTOR_NUM>2</REFLECTOR_NUM>
<SHAPE>ROUND</SHAPE>
</REFLECTOR>
</REFLECTORS>
</WHEEL>
<WHEEL>
<WHEEL_TYPE>REAR</WHEEL_TYPE>
<FLAT>NO</FLAT>
</WHEEL>
</WHEELS>
</BICYCLE>
</BICYCLES>
蓝色
正面
不
1.
广场
2.
圆形的
后方的
不
输入是
节点的列表。每个
都有一个
,并且可以选择有
是
节点的列表,每个节点都有一些属性,并且可以选择具有
是
节点的列表,每个节点都有一些属性
我们的目标是使这个XML平坦化。这是我正在使用的XSL:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes" xml:space="preserve"/>
<xsl:template match="/">
<BICYCLES>
<xsl:apply-templates/>
</BICYCLES>
</xsl:template>
<xsl:template match="BICYCLE">
<xsl:choose>
<xsl:when test="WHEELS">
<xsl:apply-templates select="WHEELS"/>
</xsl:when>
<xsl:otherwise>
<BICYCLE>
<COLOR><xsl:value-of select="COLOR"/></COLOR>
<WHEEL_TYPE/>
<FLAT/>
<REFLECTOR_NUM/>
<SHAPE/>
</BICYCLE>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="WHEELS">
<xsl:apply-templates select="WHEEL"/>
</xsl:template>
<xsl:template match="WHEEL">
<xsl:choose>
<xsl:when test="REFLECTORS">
<xsl:apply-templates select="REFLECTORS"/>
</xsl:when>
<xsl:otherwise>
<BICYCLE>
<COLOR><xsl:value-of select="../../COLOR"/></COLOR>
<WHEEL_TYPE><xsl:value-of select="WHEEL_TYPE"/></WHEEL_TYPE>
<FLAT><xsl:value-of select="FLAT"/></FLAT>
<REFLECTOR_NUM/>
<SHAPE/>
</BICYCLE>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="REFLECTORS">
<xsl:apply-templates select="REFLECTOR"/>
</xsl:template>
<xsl:template match="REFLECTOR">
<BICYCLE>
<COLOR><xsl:value-of select="../../../../COLOR"/></COLOR>
<WHEEL_TYPE><xsl:value-of select="../../WHEEL_TYPE"/></WHEEL_TYPE>
<FLAT><xsl:value-of select="../../FLAT"/></FLAT>
<REFLECTOR_NUM><xsl:value-of select="REFLECTOR_NUM"/></REFLECTOR_NUM>
<SHAPE><xsl:value-of select="SHAPE"/></SHAPE>
</BICYCLE>
</xsl:template>
</xsl:stylesheet>
输出为:
<BICYCLES xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>FRONT</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM>1</REFLECTOR_NUM>
<SHAPE>SQUARE</SHAPE>
</BICYCLE>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>FRONT</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM>2</REFLECTOR_NUM>
<SHAPE>ROUND</SHAPE>
</BICYCLE>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>REAR</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM/>
<SHAPE/>
</BICYCLE>
</BICYCLES>
蓝色
正面
不
1.
广场
蓝色
正面
不
2.
圆形的
蓝色
后方的
不
我不喜欢的是,我以几种形式输出颜色属性:
<COLOR><xsl:value-of select="../../../../COLOR"/></COLOR>
<COLOR><xsl:value-of select="../../COLOR"/></COLOR>
<COLOR><xsl:value-of select="COLOR"/></COLOR>
<COLOR/>
似乎应该有一种方法来创建一个命名模板,从需要它的各个地方调用它,并将一些表示路径的参数传递回它所引用的
节点
有没有办法清理这个问题,比如用自行车场、车轮场和反射器场的命名模板
在实际示例中,这是基于“bicycle”的,它的属性远不止颜色,我想使XSL易于更改,以包含或排除字段,而无需在多个位置更改XSL。您可以使用
name
属性来命名模板。您可以使用按名称调用模板,只要
有效,模板就有效(IIRC)
更新(来自评论):听起来你想要一个不同的祖先,可能是
。类似于祖先::bicycle/color
?您可以使用name
属性来命名模板。您可以使用按名称调用模板,只要
有效,模板就有效(IIRC)
更新(来自评论):听起来你想要一个不同的祖先,可能是。类似于祖先的东西:自行车/颜色你的意思是:
<xsl:template name="wheelblock">
<xsl:param name="color"></xsl:param>
<!-- Do something here -->
</xsl:template>
<xsl:template match="WHEEL">
<xsl:call-template name="wheelblock">
<xsl:with-param name="color">whatever element/etc</xsl:with-param>
</xsl:call-template>
</xsl:template>
任何元素/等
你的意思是:
<xsl:template name="wheelblock">
<xsl:param name="color"></xsl:param>
<!-- Do something here -->
</xsl:template>
<xsl:template match="WHEEL">
<xsl:call-template name="wheelblock">
<xsl:with-param name="color">whatever element/etc</xsl:with-param>
</xsl:call-template>
</xsl:template>
任何元素/等
我不喜欢的是
我正在输出中的颜色属性
几种形式:
<COLOR><xsl:value-of select="../../../../COLOR"/></COLOR>
<COLOR><xsl:value-of select="../../COLOR"/></COLOR>
<COLOR><xsl:value-of select="COLOR"/></COLOR>
<COLOR/>
信息技术
看来应该有办法
创建一个命名模板并调用它
从它所在的各个地方
需要并传递一些参数
表示返回的路径
它所引用的节点
比如说,有没有办法清理一下
使用自行车的命名模板
字段,用于控制盘字段和
反射器场
您可以实现比这更多的重用
原则是避免条件逻辑,让XSLT处理器选择要处理的模板。任何需要的值都应作为参数沿路径传递给应用的模板
以下转换演示了这些原则:
<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="BICYCLE">
<xsl:apply-templates>
<xsl:with-param name="pColor" select="COLOR"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="BICYCLE[not(WHEELS)]">
<BICYCLE>
<COLOR><xsl:value-of select="COLOR"/></COLOR>
<WHEEL_TYPE/>
<FLAT/>
<REFLECTOR_NUM/>
<COLOR/>
<SHAPE/>
</BICYCLE>
</xsl:template>
<xsl:template match="WHEELS">
<xsl:param name="pColor"/>
<xsl:apply-templates>
<xsl:with-param name="pColor" select="$pColor"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="WHEEL[REFLECTORS]">
<xsl:param name="pColor"/>
<xsl:apply-templates select="REFLECTORS">
<xsl:with-param name="pColor" select="$pColor"/>
<xsl:with-param name="pWheel_Type" select="WHEEL_TYPE"/>
<xsl:with-param name="pFlat" select="FLAT"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="WHEEL">
<xsl:param name="pColor"/>
<BICYCLE>
<COLOR><xsl:value-of select="$pColor"/></COLOR>
<WHEEL_TYPE><xsl:value-of select="WHEEL_TYPE"/></WHEEL_TYPE>
<FLAT><xsl:value-of select="FLAT"/></FLAT>
<REFLECTOR_NUM/>
<COLOR/>
<SHAPE/>
</BICYCLE>
</xsl:template>
<xsl:template match="REFLECTORS">
<xsl:param name="pColor"/>
<xsl:param name="pWheel_Type"/>
<xsl:param name="pFlat"/>
<xsl:apply-templates select="REFLECTOR">
<xsl:with-param name="pColor" select="$pColor"/>
<xsl:with-param name="pWheel_Type" select="$pWheel_Type"/>
<xsl:with-param name="pFlat" select="$pFlat"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="REFLECTOR">
<xsl:param name="pColor"/>
<xsl:param name="pWheel_Type"/>
<xsl:param name="pFlat"/>
<BICYCLE>
<COLOR><xsl:value-of select="$pColor"/></COLOR>
<WHEEL_TYPE><xsl:value-of select="$pWheel_Type"/></WHEEL_TYPE>
<FLAT><xsl:value-of select="$pFlat"/></FLAT>
<REFLECTOR_NUM><xsl:value-of select="REFLECTOR_NUM"/></REFLECTOR_NUM>
<COLOR><xsl:value-of select="COLOR"/></COLOR>
<SHAPE><xsl:value-of select="SHAPE"/></SHAPE>
</BICYCLE>
</xsl:template>
<xsl:template match="BICYCLE/COLOR"/>
</xsl:stylesheet>
<BICYCLES>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>FRONT</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM>1</REFLECTOR_NUM>
<COLOR>RED</COLOR>
<SHAPE>SQUARE</SHAPE>
</BICYCLE>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>FRONT</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM>2</REFLECTOR_NUM>
<COLOR>WHITE</COLOR>
<SHAPE>ROUND</SHAPE>
</BICYCLE>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>REAR</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM/>
<COLOR/>
<SHAPE/>
</BICYCLE>
</BICYCLES>
应用于提供的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="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="BICYCLE">
<xsl:apply-templates>
<xsl:with-param name="pColor" select="COLOR"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="BICYCLE[not(WHEELS)]">
<BICYCLE>
<COLOR><xsl:value-of select="COLOR"/></COLOR>
<WHEEL_TYPE/>
<FLAT/>
<REFLECTOR_NUM/>
<COLOR/>
<SHAPE/>
</BICYCLE>
</xsl:template>
<xsl:template match="WHEELS">
<xsl:param name="pColor"/>
<xsl:apply-templates>
<xsl:with-param name="pColor" select="$pColor"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="WHEEL[REFLECTORS]">
<xsl:param name="pColor"/>
<xsl:apply-templates select="REFLECTORS">
<xsl:with-param name="pColor" select="$pColor"/>
<xsl:with-param name="pWheel_Type" select="WHEEL_TYPE"/>
<xsl:with-param name="pFlat" select="FLAT"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="WHEEL">
<xsl:param name="pColor"/>
<BICYCLE>
<COLOR><xsl:value-of select="$pColor"/></COLOR>
<WHEEL_TYPE><xsl:value-of select="WHEEL_TYPE"/></WHEEL_TYPE>
<FLAT><xsl:value-of select="FLAT"/></FLAT>
<REFLECTOR_NUM/>
<COLOR/>
<SHAPE/>
</BICYCLE>
</xsl:template>
<xsl:template match="REFLECTORS">
<xsl:param name="pColor"/>
<xsl:param name="pWheel_Type"/>
<xsl:param name="pFlat"/>
<xsl:apply-templates select="REFLECTOR">
<xsl:with-param name="pColor" select="$pColor"/>
<xsl:with-param name="pWheel_Type" select="$pWheel_Type"/>
<xsl:with-param name="pFlat" select="$pFlat"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="REFLECTOR">
<xsl:param name="pColor"/>
<xsl:param name="pWheel_Type"/>
<xsl:param name="pFlat"/>
<BICYCLE>
<COLOR><xsl:value-of select="$pColor"/></COLOR>
<WHEEL_TYPE><xsl:value-of select="$pWheel_Type"/></WHEEL_TYPE>
<FLAT><xsl:value-of select="$pFlat"/></FLAT>
<REFLECTOR_NUM><xsl:value-of select="REFLECTOR_NUM"/></REFLECTOR_NUM>
<COLOR><xsl:value-of select="COLOR"/></COLOR>
<SHAPE><xsl:value-of select="SHAPE"/></SHAPE>
</BICYCLE>
</xsl:template>
<xsl:template match="BICYCLE/COLOR"/>
</xsl:stylesheet>
<BICYCLES>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>FRONT</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM>1</REFLECTOR_NUM>
<COLOR>RED</COLOR>
<SHAPE>SQUARE</SHAPE>
</BICYCLE>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>FRONT</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM>2</REFLECTOR_NUM>
<COLOR>WHITE</COLOR>
<SHAPE>ROUND</SHAPE>
</BICYCLE>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>REAR</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM/>
<COLOR/>
<SHAPE/>
</BICYCLE>
</BICYCLES>
蓝色
正面
不
1.
红色
广场
蓝色
正面
不
2.
白色
圆形的
蓝色
后方的
不
我不喜欢的是
我正在输出中的颜色属性
几种形式:
<COLOR><xsl:value-of select="../../../../COLOR"/></COLOR>
<COLOR><xsl:value-of select="../../COLOR"/></COLOR>
<COLOR><xsl:value-of select="COLOR"/></COLOR>
<COLOR/>
信息技术
看来应该有办法
创建一个命名模板并调用它
从它所在的各个地方
需要并传递一些参数
表示返回的路径
它所引用的节点
比如说,有没有办法清理一下
使用自行车的命名模板
字段,用于控制盘字段和
反射器场
您可以实现比这更多的重用
原则是避免条件逻辑,让XSLT处理器选择要处理的模板。任何需要的值都应作为参数沿路径传递给应用的模板
以下转换演示了这些原则:
<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="BICYCLE">
<xsl:apply-templates>
<xsl:with-param name="pColor" select="COLOR"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="BICYCLE[not(WHEELS)]">
<BICYCLE>
<COLOR><xsl:value-of select="COLOR"/></COLOR>
<WHEEL_TYPE/>
<FLAT/>
<REFLECTOR_NUM/>
<COLOR/>
<SHAPE/>
</BICYCLE>
</xsl:template>
<xsl:template match="WHEELS">
<xsl:param name="pColor"/>
<xsl:apply-templates>
<xsl:with-param name="pColor" select="$pColor"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="WHEEL[REFLECTORS]">
<xsl:param name="pColor"/>
<xsl:apply-templates select="REFLECTORS">
<xsl:with-param name="pColor" select="$pColor"/>
<xsl:with-param name="pWheel_Type" select="WHEEL_TYPE"/>
<xsl:with-param name="pFlat" select="FLAT"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="WHEEL">
<xsl:param name="pColor"/>
<BICYCLE>
<COLOR><xsl:value-of select="$pColor"/></COLOR>
<WHEEL_TYPE><xsl:value-of select="WHEEL_TYPE"/></WHEEL_TYPE>
<FLAT><xsl:value-of select="FLAT"/></FLAT>
<REFLECTOR_NUM/>
<COLOR/>
<SHAPE/>
</BICYCLE>
</xsl:template>
<xsl:template match="REFLECTORS">
<xsl:param name="pColor"/>
<xsl:param name="pWheel_Type"/>
<xsl:param name="pFlat"/>
<xsl:apply-templates select="REFLECTOR">
<xsl:with-param name="pColor" select="$pColor"/>
<xsl:with-param name="pWheel_Type" select="$pWheel_Type"/>
<xsl:with-param name="pFlat" select="$pFlat"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="REFLECTOR">
<xsl:param name="pColor"/>
<xsl:param name="pWheel_Type"/>
<xsl:param name="pFlat"/>
<BICYCLE>
<COLOR><xsl:value-of select="$pColor"/></COLOR>
<WHEEL_TYPE><xsl:value-of select="$pWheel_Type"/></WHEEL_TYPE>
<FLAT><xsl:value-of select="$pFlat"/></FLAT>
<REFLECTOR_NUM><xsl:value-of select="REFLECTOR_NUM"/></REFLECTOR_NUM>
<COLOR><xsl:value-of select="COLOR"/></COLOR>
<SHAPE><xsl:value-of select="SHAPE"/></SHAPE>
</BICYCLE>
</xsl:template>
<xsl:template match="BICYCLE/COLOR"/>
</xsl:stylesheet>
<BICYCLES>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>FRONT</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM>1</REFLECTOR_NUM>
<COLOR>RED</COLOR>
<SHAPE>SQUARE</SHAPE>
</BICYCLE>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>FRONT</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM>2</REFLECTOR_NUM>
<COLOR>WHITE</COLOR>
<SHAPE>ROUND</SHAPE>
</BICYCLE>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>REAR</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM/>
<COLOR/>
<SHAPE/>
</BICYCLE>
</BICYCLES>
应用于提供的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="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="BICYCLE">
<xsl:apply-templates>
<xsl:with-param name="pColor" select="COLOR"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="BICYCLE[not(WHEELS)]">
<BICYCLE>
<COLOR><xsl:value-of select="COLOR"/></COLOR>
<WHEEL_TYPE/>
<FLAT/>
<REFLECTOR_NUM/>
<COLOR/>
<SHAPE/>
</BICYCLE>
</xsl:template>
<xsl:template match="WHEELS">
<xsl:param name="pColor"/>
<xsl:apply-templates>
<xsl:with-param name="pColor" select="$pColor"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="WHEEL[REFLECTORS]">
<xsl:param name="pColor"/>
<xsl:apply-templates select="REFLECTORS">
<xsl:with-param name="pColor" select="$pColor"/>
<xsl:with-param name="pWheel_Type" select="WHEEL_TYPE"/>
<xsl:with-param name="pFlat" select="FLAT"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="WHEEL">
<xsl:param name="pColor"/>
<BICYCLE>
<COLOR><xsl:value-of select="$pColor"/></COLOR>
<WHEEL_TYPE><xsl:value-of select="WHEEL_TYPE"/></WHEEL_TYPE>
<FLAT><xsl:value-of select="FLAT"/></FLAT>
<REFLECTOR_NUM/>
<COLOR/>
<SHAPE/>
</BICYCLE>
</xsl:template>
<xsl:template match="REFLECTORS">
<xsl:param name="pColor"/>
<xsl:param name="pWheel_Type"/>
<xsl:param name="pFlat"/>
<xsl:apply-templates select="REFLECTOR">
<xsl:with-param name="pColor" select="$pColor"/>
<xsl:with-param name="pWheel_Type" select="$pWheel_Type"/>
<xsl:with-param name="pFlat" select="$pFlat"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="REFLECTOR">
<xsl:param name="pColor"/>
<xsl:param name="pWheel_Type"/>
<xsl:param name="pFlat"/>
<BICYCLE>
<COLOR><xsl:value-of select="$pColor"/></COLOR>
<WHEEL_TYPE><xsl:value-of select="$pWheel_Type"/></WHEEL_TYPE>
<FLAT><xsl:value-of select="$pFlat"/></FLAT>
<REFLECTOR_NUM><xsl:value-of select="REFLECTOR_NUM"/></REFLECTOR_NUM>
<COLOR><xsl:value-of select="COLOR"/></COLOR>
<SHAPE><xsl:value-of select="SHAPE"/></SHAPE>
</BICYCLE>
</xsl:template>
<xsl:template match="BICYCLE/COLOR"/>
</xsl:stylesheet>
<BICYCLES>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>FRONT</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM>1</REFLECTOR_NUM>
<COLOR>RED</COLOR>
<SHAPE>SQUARE</SHAPE>
</BICYCLE>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>FRONT</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM>2</REFLECTOR_NUM>
<COLOR>WHITE</COLOR>
<SHAPE>ROUND</SHAPE>
</BICYCLE>
<BICYCLE>
<COLOR>BLUE</COLOR>
<WHEEL_TYPE>REAR</WHEEL_TYPE>
<FLAT>NO</FLAT>
<REFLECTOR_NUM/>
<COLOR/>
<SHAPE/>
</BICYCLE>
</BICYCLES>
蓝色
正面
不
1.
红色
广场
蓝色
正面
不
2.
白色