解析大型 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)"的主要内容,如果未能解决你的问题,请参考以下文章
如何在资源有限的 Haskell 中解析大型 XML 文件?
使用 XMLreader 读取和解析大型 XML 文件。空值问题