我需要将源架构定义的所有 Float 和 Double 数据类型转换为十进制数据类型。
我们有一个现有的 XSLT,它从第三方获取 XML 文档并将其转换为 XML 结构,然后我们可以将其传递到我们的 4GL DB 应用程序中。原生 4GL 接口的好处在于它可以将入站 XML 转换为原生 Dataset 结构。不足之处在于它将 Float 和 Double 数据类型映射到字符数据类型。
在 XSLT 中是否有一种方法可以识别 Float/Double 数据类型的元素并将其转换为小数。我在想这可能是主要的 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>
所需的架构输出:
<?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>