解析大型 XML 文件失败--ERROR:Error Domain=DDXMLErrorDomain Code=1 "(null)"

Posted

技术标签:

【中文标题】解析大型 XML 文件失败--ERROR:Error Domain=DDXMLErrorDomain Code=1 "(null)"【英文标题】:Parsing large XML files fails--ERROR:Error Domain=DDXMLErrorDomain Code=1 "(null)" 【发布时间】:2017-12-20 03:21:31 【问题描述】:

我正在使用 KissXML 解析 XML。我可以成功解析小型 XML,但遇到大型 XML 问题。这是我的代码

let url = URL(fileURLWithPath: xmlPath!)
let xmlData = try! Data(contentsOf: url)
    do 
        let doc = try DDXMLDocument(data: xmlData, options:0)// This is not working if xml is large (6MB)
        let project = try! doc.nodes(forXPath: "//Project") as! [DDXMLElement]

        for user in project 

            let ProjectName = user.attribute(forName: "ProjectName")!.stringValue
            let userTime = user.attribute(forName: "UseTime")!.stringValue
            print("ProjectName:\(ProjectName!),userTime:\(userTime!)")
        
    
    catch 
        print("\(error)") //Get some idea from this error
    

当解析 12k XML 成功,但 6M XML 失败。解析大型 XML(6M) 时,doc 等于 nil。 我尝试使用NSXMLParser,出现同样的问题,小文件可以工作,大文件不能。ERROR:NSXMLParserErrorDomain error 4.

【问题讨论】:

这适用于 ios 吗? DOM 解析器为大型 XML 文件使用大量内存。您最好使用NSXMLParser 并仅提取您需要的数据。 是的,这是iOS的。谢谢你的建议,但我需要XML文件中的所有数据,我会试试NSXMLParser。 【参考方案1】:

您不应使用try? 忽略错误,始终将其包含在do - catch 构造中。使用下面的代码,看看你得到了什么错误,然后尝试解决它。不要在黑暗中拍摄,从错误中获得一些想法,如果没有任何效果,请在问题中发布您的错误消息。

do 
    let doc = try DDXMLDocument(data: xmlData, options:0)
    // Your next line of code

catch 
    print("\(error)") //Get some idea from this error

【讨论】:

感谢您的建议。我使用您的代码,错误很简单:Error Domain=DDXMLErrorDomain Code=1 "(null)"。我尝试了NSXMLParser,出现同样的问题。小XML文件可以工作,大XML文件不工作。错误是:NSXMLParserErrorDomain错误4。 行号。 this code 中的 97 它从 xmlParseMemory 返回此错误 请检查您的文件是否正确。 我试过 11MB 的 xml 也可以,看来你的 xml 有问题。 你是对的!我更改了文件并试了一下,它成功了。非常感谢!

以上是关于解析大型 XML 文件失败--ERROR:Error Domain=DDXMLErrorDomain Code=1 "(null)"的主要内容,如果未能解决你的问题,请参考以下文章

在 Node.js 中解析大型 XML 文件

如何在资源有限的 Haskell 中解析大型 XML 文件?

使用 XMLreader 读取和解析大型 XML 文件。空值问题

在 SQL Server 中导入和解析大型 XML 文件(当“正常”方法相当慢时)

使用 stax 和 dom 读取大型 XML 文件

在 JAVA 中解析大型 XML 文档