You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中IXMLDOMDocument2无法加载含%的XML文件,如何解决?

解决IXMLDOMDocument2加载含%符号XML文件的问题

问题原因

IXMLDOMDocument的load方法会将传入的文件路径当作URL解析,而%是URL中的转义符,未转义的%会被判定为不完整的转义序列,导致路径解析失败,无法找到目标文件。

解决方案

1. 对文件名中的%进行URL转义

将路径里的%替换为URL转义后的%25,再传入load方法:

' VBScript示例
Dim xmlDoc, rawPath, encodedPath
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
rawPath = "C:\docs\test%sample.xml"
' 替换%为URL转义值%25
encodedPath = Replace(rawPath, "%", "%25")
xmlDoc.async = False

If xmlDoc.Load(encodedPath) Then
    ' 加载成功后的处理逻辑
Else
    WScript.Echo "加载失败: " & xmlDoc.parseError.reason
End If

2. 使用file:///协议前缀并转义%

给本地路径加上file:///前缀,同时转义%为%25,明确告诉解析器这是本地文件路径:

// C++示例
_bstr_t filePath = L"file:///C:/docs/test%25sample.xml";
IXMLDOMDocument2* pDoc = nullptr;
CoCreateInstance(CLSID_DOMDocument60, nullptr, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument2, (void**)&pDoc);

VARIANT_BOOL loadSuccess;
pDoc->load(filePath, &loadSuccess);

3. 先读取文件内容再用LoadXML加载

绕开路径解析环节,先通过文件IO读取XML内容到内存,再调用LoadXML方法加载:

// C++示例
#include <fstream>
#include <string>
#include <comutil.h>
#include <msxml2.h>

#pragma comment(lib, "comsuppw.lib")
#pragma comment(lib, "msxml6.lib")

int main() {
    CoInitialize(nullptr);
    IXMLDOMDocument2* pDoc = nullptr;
    CoCreateInstance(CLSID_DOMDocument60, nullptr, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument2, (void**)&pDoc);

    // 读取文件内容
    std::ifstream xmlFile("C:\\docs\\test%sample.xml");
    std::string content((std::istreambuf_iterator<char>(xmlFile)), std::istreambuf_iterator<char>());
    _bstr_t bstrContent(content.c_str());

    // 加载内存中的XML内容
    VARIANT_BOOL loadSuccess;
    pDoc->loadXML(bstrContent, &loadSuccess);

    if (loadSuccess == VARIANT_TRUE) {
        // 加载成功处理
    } else {
        IXMLDOMParseError* pErr = nullptr;
        pDoc->get_parseError(&pErr);
        BSTR errReason;
        pErr->get_reason(&errReason);
        // 输出错误信息
        SysFreeString(errReason);
        pErr->Release();
    }

    pDoc->Release();
    CoUninitialize();
    return 0;
}

内容的提问来源于stack exchange,提问作者Jian Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 13:01:40