我在将文件加载到IXMLDOMDocument2. 如果文件名包含并load设置为:False%parseError
系统找不到指定的资源。
%该文件存在,当从其名称中删除时,它工作得很好。
有什么方法可以加载%名称中包含的 XML 文件吗?
的文档IXMLDOMDocument.load()表示xmlSource源参数接受以下值之一:
IStreamISequentialStreamIPersistStreamSAFEARRAY字节数IXMLDOMDocument例子您正在尝试传递一个文件名,该方法将其视为 URL(上面列表中的第一个选项)。URL 中的字符%保留用于百分比编码。该IXMLDOMDocument.load()方法尝试从您作为参数传递的字符串中解码 URL,这可能会导致文件名略有不同。棘手的部分是,当百分比字符后面没有跟一对十六进制数字时,不会发生这种情况,这意味着:Test%.xml将被解码为Test%.xml,但Test%21.xml将被解码为Test!.xml,或Test%4A.xml将被解码为TestJ.xml。
您应该小心传递给该IXMLDOMDocument.load()方法的内容。您有多种选择。
这很容易。TNetEncoding.URL您可以从本机使用System.NetEncoding:
var FileName := 'C:\test%21.xml';
var Doc := CoDOMDocument.Create;
Doc.load(TNetEncoding.URL.Encode(FileName));
Run Code Online (Sandbox Code Playgroud)
IStream作为参数:TFileStream使用(或TFile.OpenRead()来自单元)打开文件System.IOUtils并将其包装在TStreamAdapter来自System.CLasses单元中,该单元实现了单元IStream中声明的接口Winapi.ActiveX。
var FileName := 'C:\test%21.xml';
var Stream: IStream := TStreamAdapter.Create(TFile.OpenRead(FileName), soOwned);
var Doc := CoDOMDocument.Create;
Doc.load(Stream);
Run Code Online (Sandbox Code Playgroud)
loadXML()以下方法:有一种IXMLDOMDOcument.loadXML()方法允许您从字符串加载 XML 内容。您可以使用TFile.ReadAllText()(unit System.IOUtils) 读取文件的内容并将其传递给loadXML()方法。
var FileName := 'C:\test%21.xml';
var Doc := CoDOMDocument.Create;
Doc.loadXML(TFile.ReadAllText(FileName));
Run Code Online (Sandbox Code Playgroud)
我不建议使用此选项加载 XML,因为它将文件的全部内容加载到内存中。
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |