我计划一次性采用一种处理gpx文件创建的工具。
我相信SimpleStorage这是一个基于OmniXML的存储,适合于简单的XML数据管理,数据存储和系统之间的数据交换。
这是一个(不完整的)片段,用于生成裸骨gpx文件:
function CreateGpx: ISimpleStorage;
const
versionStr = '1.1';
creatorStr = 'MyGpxCreatorSSway';
xmlnsStr = 'http://www.topografix.com/GPX/1/1';
xmlns_xsiStr = 'http://www.w3.org/2001/XMLSchema-instance';
xsiStr: string = xmlnsStr+' '+
xmlnsStr+'/gpx.xsd';
begin
Result := CreateStorage('gpx');
CreateBuilder(Result).Construct(
[
AddAttr('xmlns',xmlnsStr),
AddAttr('version',versionStr),
AddAttr('creator',creatorStr),
AddAttr('xmlns:xsi',xmlns_xsiStr),
AddAttr('xsi:schemaLocation',xsiStr),
//
AddElement('metadata',
[
AddElement('bounds',
[
AddAttr('minlat','90.00000000'),
AddAttr('minlon','180.00000000'),
AddAttr('maxlat','-90.00000000'),
AddAttr('maxlon','-180.00000000')
]),
AddElement('extensions',[])
]),
AddElement('extensions',[])
]
);
end;
请帮助我!
答案 0 :(得分:1)
我在post网站上发现了来自 Miha Remec 的相关OmniXML。
我的问题的一个可能答案可能归结为如下:
with OwnerDocument(Result.XMLNode) do
begin
InsertBefore(CreateProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"'), DocumentElement)
end;
紧跟在指令行之后追加:
Result := CreateStorage('gpx');
答案 1 :(得分:0)
uses
OmniXML,
OmniXMLUtils;
function CreateGpx: ISimpleStorage;
{ ... }
var
xmlDocument: IXMLDocument;
xmlProcessingInstruction: IXMLProcessingInstruction;
fisrtChild: IXMLNode;
begin
{ ... }
xmlDocument := OmniXMLUtils.OwnerDocument(Result.Node.ParentNode);
if OmniXMLUtils.FindProcessingInstruction(xmlDocument) = nil then
begin
xmlProcessingInstruction := xmlDocument.CreateProcessingInstruction('xml', 'version="1.0" encoding="utf-8"');
fisrtChild := xmlDocument.FirstChild;
if fisrtChild = nil then
begin
xmlDocument.AppendChild(xmlProcessingInstruction);
end
else
begin
xmlDocument.InsertBefore(xmlProcessingInstruction, fisrtChild);
end;
end;
{ ... }
end;