gpt4 book ai didi

xml - 保存XML文档会将单引号更改为双引号

转载 作者:行者123 更新时间:2023-12-03 16:51:49 24 4
gpt4 key购买 nike

我有一个XML文件,需要在Delphi XE2中读取,使用XPath查找一些节点,然后操纵这些节点。输入XML文件在属性值周围使用单引号。当我调用SaveToFile时,XML文件现在在属性值周围使用双引号而不是单引号。我知道在XML规范中,单引号和双引号无关紧要,只要它们匹配即可。但是,这会导致两个问题:1)读取XML文件的第三方程序不喜欢双引号,以及2)读取的内容比较混乱。

有没有一种方法可以防止在我调用SaveToFile时将单引号更改为双引号?

尽管有Delphi的经验,但我还是不熟悉使用Delphi来处理XML,因此我可能对选择使用的对象有所了解。我可以从网上找到一些示例,将其拼凑在一起。

var doc: IXMLDocument;
Node : IDOMNode;
Sel: IDOMNodeSelect;
List : IDOMNodeList;
j : Integer;
begin
doc := TXMLDocument.Create(Application);
doc.LoadFromFile('somefile.xml'); //Input file uses single quotes around attribute values
doc.active := True;
Sel := doc.DOMDocument as IDomNodeSelect;
List := Sel.selectNodes('//column[not(@hidden=''true'') and @caption]');
for j := 0 to List[i].childNodes.length-1 do
List[i].childNodes[0].nodeValue := 'foo';

doc.SaveToFile('somefile2.xml'); //This is a copy to compare against the original
//Output file has double quotes around attribute values
end;


同样感谢在Delphi中为XML和XPath使用不同对象的评论和建议。该代码对我来说似乎太复杂了。

最佳答案

显然,以上注释在技术上是正确的:“读取XML文件的第三方程序”实际上不符合XML规范,并且可以使用支持XML的diff来避免diff问题。但是我怀疑OP无法进行有效的投诉,并且没有相关的diff

我看到两个合理的解决方法,都涉及脚本。

第一个建议是黑客。只需通过sed -e s/"/'/g运行XML输出,然后再执行diff。关键是,有效XML中除属性值周围的标记外不能存在"标记,因此,假设保存XML的程序是兼容的,这应该没问题。

第二个建议是,在执行readxml | savexml之前,先使用XML程序通过diff运行原始XML,然后再次依靠XML程序正确地完成其工作。

关于xml - 保存XML文档会将单引号更改为双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44687289/

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