Delphi - 我可以使用NativeXml创建规范化的XML吗?

4

多年来,我一直使用NativeXml从程序数据创建xml。这个方法非常有效,但现在我遇到了一个问题。

现在,我需要将哈希值插入从xml的规范形式创建的xml中。我查看了Native Xml的"Canonicalize"函数,但是我可能没有正确使用它(很有可能),或者(因为它被标记为实验性的)它无法执行所需的操作。

我按照唯一找到的示例这样使用它:

MyXmlFile.Canonicalize;

我一直向一个测试服务发送xml,没有出现任何问题,所以我认为一切都很好。接收方接受了xml提交和哈希码。规范化会去掉开头的xml标签<?xml version="1.0"?>,但由于xml已经相当规范化,而且我没有将其格式设置为xfReadable,所以我找不到太大的区别。

现在我遇到了一个问题。我的某些数据中包含撇号,例如O'Reilly这样的名字,在xml中正确写作如下:

<Surname>O&apos;Reilly</Surname>

据我所知,当进行规范化处理时,应该显示为:
<Surname>O'Reilly</Surname>

由于哈希值不匹配,我的XML提交被接收方拒绝了。

我已经花了两天时间查阅NativeXml代码、文档以及在线资料,但都没有找到答案。不幸的是,NativeXml论坛似乎也没有活力。

我应该在NativeXml中做些什么吗?如果不使用NativeXml,有其他工具可以完成这项工作吗?是否有任何方法可以将XML传递给它,以使其正确地规范化?


你尝试过发布一个功能建议吗?(它是开源的,因此所有用户社区成员都可以帮助实现) - mjn
根据Simdesign网站上NativeXml论坛的情况,我想他们的社区已经转移了。很遗憾,那是我购买的第一个第三方Delphi组件(虽然它几乎不贵),而且这是我在将近十年后仍在使用的唯一一个组件。 - user2140546
目前仍然无法在任何地方找到有用的信息,因此我不得不将哈希规范化 XML 的字符串中的任何 &apos; 替换为单个 '。目前它可以工作。幸运的是,目前我只需要担心撇号。 - user2140546
1个回答

2

当前版本的NativeXML(4.07)从DTD中获取命名字符实体并将其扩展。当然,这四个预定义的命名字符实体不在任何DTD中,因此它们不会被处理。看起来数字字符实体也没有规范化,并且还有几个其他的转换尚未实现。在其当前状态下,NativeXML并不是完成该工作的合适工具。


+1 但我认为有五个预定义的XML命名字符实体,而不是四个。 - David Heffernan
@RobKennedy - 这是我开始形成的结论,现在我想要的不仅仅是创建XML,而是必须继续前进。有什么建议吗?规范化是必须的。 - user2140546

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接