gpt4 book ai didi

delphi - 在 OmniXML 的 NodeAttributes 中添加换行符

转载 作者:行者123 更新时间:2023-12-03 19:48:53 24 4
gpt4 key购买 nike

我有一个 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 := 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>

最佳答案

OmniXML 不提供如此精细的输出格式控制。您或许可以寻找一个外部 XML pretty-print 来满足您的需要。或者您甚至可以编写自己的 XML 库。

不过,在您进一步讨论之前,我想指出 XML 从未打算供人类阅读。它的设计不努力使其具有可读性,如果您继续尝试使您的 XML 尽可能具有可读性,那么您将逆流而上。如果您想要一种人类可读的结构化文件格式,那么您可能会转而查看为此设计的 YAML。

另一个需要考虑的途径是 XML 的结构。使用节点属性来指定一组值是一个糟糕的决定。属性旨在与名称/值映射对一起使用。如果你想指定一个值数组,那么你可以这样做:

<links>
<item>http://www.somelink1.com</item>
<item>http://www.somelink2.com</item>
<item>http://www.somelink3.com</item>
</links>

这比您的 XML 更清晰,也更容易解析。尝试编写代码来解析你的属性,你会明白我的意思。

现在,为了说明我上面的观点,在 YAML 中这将是:
Links:
- http://www.somelink1.com
- http://www.somelink2.com
- http://www.somelink3.com

当然,如果您以外的其他人正在定义 XML 的格式,那么所有这些都是没有意义的。

关于delphi - 在 OmniXML 的 NodeAttributes 中添加换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41563819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com