问题标签 [txmldocument]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1242 浏览

xml - 如何独立于区域设置从 XML 文件中正确读取浮点值?

我正在从 XML 文件中的节点读取浮点属性值TXMLDocument

...有了这个声明:

但是,在我的德语系统上,我得到了这个版本值:

这个版本 = 10,00

...在我的区域设置中,逗号“,”被定义为小数分隔符,而不是点“。” 就像在 XML 文件中一样。但是使用英语区域设置 - 其中点最有可能定义为小数分隔符设置 - 结果将正确为“1.0”。

那么如何确保独立于区域设置的1.0读取值始终相同?(将版本值读取为字符串,然后将其转换为浮点数似乎不是一个非常优雅的方法)。

0 投票
1 回答
301 浏览

xml - 使用 TXMLDocument 难以解析 XML

我以前没有使用过 XML,并且在使用 TXMLDocument 解析 XML 时遇到了困难。(德尔福 10.1)

在我的应用程序中,我需要通过在 Geonames Web Service 上进行反向地理编码查询,使用 EXIF 信息中的纬度和经度来查找照片拍摄地点的地名和邮政编码等 - 请参阅http://www.geonames.org/export /web-services.html

这部分工作正常,但在从返回的 XML 中获取数据时遇到了问题,该 XML 的形式为

我正在尝试将此数据放入记录中:

使用此测试功能(在具有 TXMLDocument 和 TIdHTTP 的 DataModule 中)

最后一行导致访问冲突。我显然在做一些愚蠢的事情,但我看不到是什么。

正如我所说,我以前从未使用过 XML 数据或 TXMLDocument。非常感谢任何帮助。

0 投票
1 回答
507 浏览

delphi - Delphi - 可以将 TXMLDocument 配置为忽略不正确的 DTD 实体吗?

我正在用 RAD Studio XE7 编写 Delphi 代码。在我的一个项目中,我需要解析几个 SVG 文件以在屏幕上绘制它们的内容。为此,我使用 TXMLDocument 解析器。

我的源 SVG 之一包含以下 XML 数据:

我知道上面 XML 的内容是不完整的,格式良好的 SVG 应该包含这个 XML 数据:

但是,就我而言,DTD 实体是无关紧要的(我对它们什么都不做),只有 svg 标签中的部分让我感兴趣。但是,如果我尝试加载这样的 XML,TXMLDocument 解析器会引发“对未定义实体 'ns_extend' 的引用”异常,并拒绝加载 SVG。

所以我的问题是,有没有办法通知 TXMLDocument 解析器如果 DTD 实体损坏应该被简单地忽略,并强制解析器继续静默读取文档?或者这样做的唯一方法是预处理 XML,并检测和删除此类损坏?

(注意:如果可能,我想避免预先处理。SVG 可能来自任何地方,其中一些可能包含小的或严重的损坏,我希望以尽可能最通用的方式处理最大值。开始添加所有可能的特殊情况的特殊规则是一种痛苦的方式。如果 TXMLDocument 解析器能够忽略这种错误,我将非常喜欢。)

0 投票
1 回答
183 浏览

delphi - TXMLDocument.Active := False 导致 FastMM4 错误消息“FastMM 检测到块在被释放后已被修改”

我们在 FullDebugMode 中使用带有 FastMM4(版本 4.992)的 Delphi XE8 有一个奇怪的效果。

要重现效果,只需新建一个TForm应用程序,将FastMM4放在DPR文件的第一行,在Form上放一个Button,在clickhandler中放入如下代码:

(您需要安装 FastMM 4,必须在 FastMM4Options.inc 文件中启用 FullDebugMode,并且 FullDebugMode.dll 必须在程序的输出文件夹中!)

当您单击该按钮时,FastMM4 将显示一个带有以下报告的大消息框:

如果我们正确地解释了这一点,那么 FastMM 就是在告诉我们,TXMLDocument 对象的内存在它被释放之后已经被修改了。

“一些代码”似乎已经在已经释放的 TXMLDocument 的内存块中写入了所有这些 80 美元中间的 7F 美元。

仅当 ChildNodes 被访问两次 (!) 并且 TXMLDocument 的 Active 属性在对象被释放之前设置为 false 时才会发生这种情况!

问题:

有人可以解释这里发生了什么吗?

  • 将 TXMLDocument.Active 设置为 false 通常被认为是错误的还是“坏的”?(已知会导致问题吗?)

  • 我们在这里犯了其他错误吗?

  • 这是 FastMM4 中的问题吗?

  • 这是 TXMLDocument 中的问题吗?

补充观察:

如果释放 TXMLDocument 时没有将 active 设置为 false,则没有问题。

如果我们查看 TXMLDocument 的析构函数,我们会看到在 active 设置为 false 之前还有一些额外的代码:

现在,如果我们修改自己的示例代码并调用

在将 active 设置为 false 之前,问题就消失了!

代码看起来像这样:

0 投票
1 回答
271 浏览

xml - 从不同线程访问的组件中的 IXMLDocument:在哪里调用 CoInitializeEx?

我正在编写一个线程安全组件,它将 xml 字符串记录到文件中。组件的公共方法将从许多不同(类型)的线程中调用。为简化起见,在下面的示例中,组件只需从参数返回 XML 字符串。

我的问题是:我可以避免CoInitializeEx在每个线程中调用吗?我想将CoInitializeEx()andCoUnitialize和这些IXMLDocument东西保留在组件内,这样调用者就不必担心这一点。TXMLDocument即使 CoInitializeEx() 将从不在调用线程中运行的组件 (TMyLogger) 中调用,线程是否有一种安全的方法来调用该公共函数,该函数将在它们进行的每次调用时创建一个?我不确定从多个线程调用此函数是否会损坏 XMLDocument(因为它是一个接口)。

举例说明我想要做什么:

0 投票
1 回答
222 浏览

xml - 如何使用 TXMLDocument 避免异常“禁止 DTD”

我有这个 XML:

当我尝试在 中加载此 XML 时TXMLDocument,出现异常“DTD is disabled”(已翻译):

我怎样才能避免这个错误?

0 投票
1 回答
178 浏览

delphi - Delphi Win32 TXMLDocument 不能从线程中实例化和使用?

我一直在使用 IndyTIdTCPServer对象并在事件TXMLDocument期间实例化对象实例TIdTCPServer.OnExecutexml.Active当设置为 true时出现异常,我感到非常惊讶:

未安装 Microsoft MSXML

深入研究,我发现异常发生是因为TMSXMLDOMDocumentFactory.TryCoCreateInstance()无法创建正确的文档对象实例,尽管GuidList从主线程接收到与在应用程序的其他部分中接收到的相同的文档对象实例。我不明白为什么如果从组件的线程调用该对象不实例化。

这是应该实例化对象的 Embarcadero 代码:

我希望它一定与CLSCTX_INPROC_SERVERCLSCTX_LOCAL_SERVERhttps://docs.microsoft.com/en-us/windows/win32/api/wtypesbase/ne-wtypesbase-clsctx)有关,但我不明白为什么这些可能是一个问题。

即使这是原因,我如何TXMLDocument在该事件处理程序中使用?