gpt4 book ai didi

ios - NSXMLParser 不读取所有元素

转载 作者:行者123 更新时间:2023-11-28 06:40:24 25 4
gpt4 key购买 nike

我需要解析一个 xml 文件,其内容可以在这个网站上找到:http://jpg.tartu.ee/tunniplaan/xml/arvestus1.xml(为了看到这个文件一定要看页面源码!(文件太大,发不进去)

我首先下载这个文件,然后我的应用程序读取数据。

我正在使用 NSXMLParser。从上面的文件中,我需要元素 TimeTableSchedule 属性,但是 NSXMLParser 没有在文件中找到该元素,但它确实存在。

我用下面的代码检查它是否找到名为 TimeTableSchedule 的元素,但它没有!它打印出除“TimeTableSchedule”之外的所有其他元素

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
print(elementName)
}

我的问题是:为什么找不到元素 TimeTableSchedule?这与 TimeTableSchedule 元素有两个名为 Period 的属性有关吗?有什么方法可以使用 NSXMLParser

访问 TimeTableSchedule 元素属性

最佳答案

是的,问题是 XML 格式不正确。它包括如下内容:

<TimeTableSchedule DayID="" Period="" Period="-1" SchoolRoomID="" SubjectGradeID="*28" ClassID="*11" OptionalClassID="" TeacherID=""/>

Period 属性在该元素中出现了两次。事实上,如果您实现了 NSXMLParserDelegate 方法 parseErrorOccurred,您就会看到一个错误。或者您可以使用命令行程序 xmllint 来检查 XML。


鉴于您无法在 Web 服务上修复 XML,理论上您可以在客户端中自行修复它:

let url = NSURL(string: "http://jpg.tartu.ee/tunniplaan/xml/arvestus1.xml")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url) { data, response, error in
guard let data = data where error == nil else {
print(error)
return
}

// replace occurrences of `Period="" Period` with `Period`

let mutableData = data.mutableCopy() as! NSMutableData
let searchData = "Period=\"\" Period".dataUsingEncoding(NSUTF8StringEncoding)!
let replacementData = "Period".dataUsingEncoding(NSUTF8StringEncoding)!

var range = mutableData.rangeOfData(searchData, options: [], range: NSRange(location: 0, length: mutableData.length))
while range.location != NSNotFound {
mutableData.replaceBytesInRange(range, withBytes: replacementData.bytes, length: replacementData.length)
range = mutableData.rangeOfData(searchData, options: [], range: NSRange(location: range.location, length: mutableData.length - range.location))
}

// now parse

let parser = NSXMLParser(data: mutableData)
parser.delegate = self
parser.parse()

// do whatever you want with the parsed data here
}
task.resume()

关于ios - NSXMLParser 不读取所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38126809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com