unitConversion.XML 单位分类及对应关系
<?xml version="1.0" encoding="UTF-8"?>
<unitConversion>
<weight title="重量">
<t title="吨">1</t>
<kg title="千克">1000</kg>
<g title="克">1000000</g>
<lb title="磅">0.00220462</lb>
</weight>
<length title="长度">
<m title="米">1</m>
<cm title="厘米">100</cm>
<mm title="毫米">1000</mm>
<km title="千米">0.001</km>
<inch title="英寸">39.37</inch>
</length>
<volume title="体积">
<m3 title="立方米">1</m3>
<cm3 title="立方厘米">1000000</cm3>
<mm3 title="立方毫米">1000000000</mm3>
<km3 title="立方千米">0.000000001</km3>
<inch3 title="立方英寸">61024</inch3>
</volume>
<area title="面积">
<m2 title="平方米">1</m2>
<cm2 title="平方厘米">10000</cm2>
<mm2 title="平方毫米">1000000</mm2>
<km2 title="平方公里">0.000001</km2>
<acre title="公亩">0.01</acre>
<inch2 title="平方英寸">1550.05</inch2>
</area>
</unitConversion>
Delphi源码 单位换算单元
unit utUnitConversion;
interface
uses
SysUtils,
MSXML2_TLB;
(*该函数返回ASourceVal相对ADestVal之间的单位系数
AFilePath: XML文件路径
ASourceUnit, ADestUnit: 源,目标单位
Result: 返回的换算系数, 0表示配对失败
*)
function UnitConversion(const AFilePath, ASourceUnit, ADestUnit: string): Double;
implementation
function UnitConversion(const AFilePath, ASourceUnit, ADestUnit: string): Double;
var
FXMLDoc : IXMLDOMDocument2;
aNode : IXMLDOMNode;
dSource, dDest : Double;
begin
//创建XML对象
FXMLDoc := CoDOMDocument40.Create;
try
//读取XML文件内容
FXMLDoc.load(AFilePath);
FXMLDoc.setProperty('SelectionLanguage', 'XPath');
Result := 0;
//查找源单位节点,不存在则返回
aNode := FXMLDoc.selectSingleNode('unitConversion//'+ASourceUnit);
if aNode = nil then exit;
//获取源单位值
dSource := StrToFloatDef(aNode.text, 0);
//查找目标单位节点,不存在则返回
aNode := aNode.parentNode.selectSingleNode(ADestUnit);
if aNode = nil then exit;
//获取目标单位值
dDest := StrToFloatDef(aNode.text, 0);
//分母为0时返回
if dDest = 0 then exit;
//求两者之间系数
Result := dSource / dDest;
finally
FXMLDoc := nil;
end;
end;
end.
调用方式
Result := UnitConversion('unitConversion.XML', 'g', 'kg');