我需要将源模式定义的所有Float和Double数据类型转换为十进制数据类型。XML数据类型转换
我们有一个现有的XSLT,它从第三方获取XML文档并将其转换为XML结构,然后传递给我们的4GL DB应用程序。原生4GL接口的好处在于它可以将入站XML转换为原生数据集结构。简而言之,它将Float和Double数据类型映射到字符数据类型。
在XSLT中是否有一种方法来标识浮点/双精度数据类型的元素并将其转换为小数。我认为这可能是XSLT之前的主要步骤,然后将输出传递到主XSLT。
示例方案:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ttPTManifest">
<xs:complexType>
<xs:sequence>
<xs:element ref="JobCode"/>
<xs:element ref="EstimateHours"/>
<xs:element ref="ActualHours"/>
<xs:element ref="Density"/>
<xs:element ref="NettLitres"/>
<xs:element ref="QuitOutLitres"/>
<xs:element ref="QuitInLitres"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="QuitOutLitres" type="xs:double"/>
<xs:element name="QuitInLitres" type="xs:float"/>
<xs:element name="PTManifestSonicIn">
<xs:complexType>
<xs:sequence>
<xs:element ref="ttPTManifest"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="JobCode" type="xs:string"/>
<xs:element name="NettLitres" type="xs:double"/>
<xs:element name="EstimateHours" type="xs:float"/>
<xs:element name="Density" type="xs:decimal"/>
<xs:element name="ActualHours" type="xs:float"/>
</xs:schema>
示例XML数据:
<?xml version="1.0"?>
<PTManifestSonicIn xsi:noNamespaceSchemaLocation="SampleIn.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ttPTManifest>
<JobCode>000123</JobCode>
<EstimateHours>3.14159E3</EstimateHours>
<ActualHours>3.14159E3</ActualHours>
<Density>123.456</Density>
<NettLitres>3.14159265358979E3</NettLitres>
<QuitOutLitres>3.14159265358979E3</QuitOutLitres>
<QuitInLitres>3.14159E3</QuitInLitres>
</ttPTManifest>
</PTManifestSonicIn>
Rerquired架构日期:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ttPTManifest">
<xs:complexType>
<xs:sequence>
<xs:element ref="JobCode"/>
<xs:element ref="EstimateHours"/>
<xs:element ref="ActualHours"/>
<xs:element ref="Density"/>
<xs:element ref="NettLitres"/>
<xs:element ref="QuitOutLitres"/>
<xs:element ref="QuitInLitres"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="QuitOutLitres" type="xs:decimal"/>
<xs:element name="QuitInLitres" type="xs:decimal"/>
<xs:element name="PTManifestSonicIn">
<xs:complexType>
<xs:sequence>
<xs:element ref="ttPTManifest"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="JobCode" type="xs:string"/>
<xs:element name="NettLitres" type="xs:decimal"/>
<xs:element name="EstimateHours" type="xs:decimal"/>
<xs:element name="Density" type="xs:decimal"/>
<xs:element name="ActualHours" type="xs:decimal"/>
</xs:schema>
所需的XML数据输出:
<?xml version="1.0"?>
<PTManifestSonicIn xsi:noNamespaceSchemaLocation="SampleOut.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ttPTManifest>
<JobCode>000123</JobCode>
<EstimateHours>3141.59</EstimateHours>
<ActualHours>3141.59</ActualHours>
<Density>123.456</Density>
<NettLitres>3141.59265358979</NettLitres>
<QuitOutLitres>3141.59265358979</QuitOutLitres>
<QuitInLitres>3141.59</QuitInLitres>
</ttPTManifest>
</PTManifestSonicIn>
谢谢你的Mads,我给它一个去并让你知道结果。 –
用于转换数据的样式表效果很好。但是有一个问题,它没有区分数字字符表示的字符元素值和数字元素之间的区别。我应该在我的示例中包含一个字符数据类型元素。 –
我编辑了我原来的帖子,并包含一个新的元素** JobCode **。 –