Delphi 在OmniXML中的NodeAttributes中添加换行符
我有一个XML,其中一个节点有几个属性:Delphi 在OmniXML中的NodeAttributes中添加换行符,delphi,delphi-7,omnixml,Delphi,Delphi 7,Omnixml,我有一个XML,其中一个节点有几个属性: var row : IXMLNode; rowattr : IXMLAttr; xml : IXMLDocument; begin xml := ConstructXMLDocument('xml'); SetNodeAttr(xml.DocumentElement, 'version', '1.0'); SetNodeAttr(xml.DocumentElement, 'encoding', 'UTF-8'); row
var
row : IXMLNode;
rowattr : IXMLAttr;
xml : IXMLDocument;
begin
xml := ConstructXMLDocument('xml');
SetNodeAttr(xml.DocumentElement, 'version', '1.0');
SetNodeAttr(xml.DocumentElement, 'encoding', 'UTF-8');
row := AppendNode(xml, 'Links');
rowattr:=xml.CreateAttribute('Link1');
rowattr.Value:='http:\\wwww.somelink1.com';
row.Attributes.SetNamedItem(rowattr);
rowattr:=xml.CreateAttribute('Link2');
rowattr.Value:='http:\\wwww.somelink2.com';
row.Attributes.SetNamedItem(rowattr);
rowattr:=xml.CreateAttribute('Link3');
rowattr.Value:='http:\\wwww.somelink3.com';
row.Attributes.SetNamedItem(rowattr);
XMLSaveToFile(xml, 'C:\Test1.xml', ofIndent);
end;
我希望将每个链接都放在单独的一行上,如下所示:
<xml version="1.0" encoding="UTF-8">
<Links
link1="http://www.somelink1.com"
link2="http://www.somelink2.com"
link3="http://www.somelink3.com"
/>
</xml>
<links>
<item>http://www.somelink1.com</item>
<item>http://www.somelink2.com</item>
<item>http://www.somelink3.com</item>
</links>
OmniXML不提供输出格式的细粒度控制。您也许可以寻找一个外部XML漂亮的打印机,它可以满足您的需要。或者您甚至可以编写自己的XML库 在进一步讨论之前,我想指出一点,XML从来都不是供人类阅读的。它的设计并不力求可读,如果您继续尝试使XML尽可能可读,那么您将逆流而上。如果您想要一种人类可读的结构化文件格式,那么您可以看看YAML,它的设计就是考虑到了这一点
另一个要考虑的途径是XML的结构。使用节点属性指定值数组是一个糟糕的决定。属性用于名称/值映射对。如果要指定一个值数组,可以这样做:
<xml version="1.0" encoding="UTF-8">
<Links
link1="http://www.somelink1.com"
link2="http://www.somelink2.com"
link3="http://www.somelink3.com"
/>
</xml>
<links>
<item>http://www.somelink1.com</item>
<item>http://www.somelink2.com</item>
<item>http://www.somelink3.com</item>
</links>
当然,如果您以外的人正在定义XML的格式,那么所有这些都是没有意义的。所以最好不要在属性中添加任何类似的内容?问问自己如何解析这些链接。当为True时,您必须编写一个
循环,形成属性名'link'+IntToStr(i)
,检查该属性是否存在。如果是这样,读它,如果不是,打破循环。此外,该结构不透明,XML工具(转换等)无法理解。