我试图在Swift中使用NSXMLParser解析这个XML文档。 我的问题是我能够解析属性元素,如
PointsButoir,Difficulte ,etc.
但是当到达Difficulte
元素并关闭Properties
的标记时,会发生错误。
以下是我编写此代码的方法:
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
if (elementName == "Proprietes"){
isProp = true;
}
if (elementName == "arbreRenduINF2990"){
isArbre = true;
}
switch elementName {
case "xml": break
case "Proprietes" :break
case "arbreRenduINF2990" :
print("arbre")
case "PointsButoir":
let ptsButoir = attributeDict["Nombre"] as String!
prop.ptsButoir = Int(ptsButoir)!
case "PointsTriangulaire" :
let ptsTriangulaires = attributeDict["Nombre"] as String!
prop.ptsTri = Int(ptsTriangulaires)!
case "PointsCible" :
let ptsCible = attributeDict["Nombre"] as String!
prop.ptsCible = Int(ptsCible)!
case "PointsVictoire" :
let ptsVic = attributeDict["Nombre"] as String!
prop.ptsVictoire = Int(ptsVic)!
case "PointsBilleGratuite" :
let ptsBille = attributeDict["Nombre"] as String!
prop.ptsBilleGratuite = Int(ptsBille)!
case "Difficulte" :
let diff = attributeDict["Nombre"] as String!
prop.difficulte = Int(diff)!
case "table" :
let nbEnfants = attributeDict["nbEnfants"] as String!
let nbreNoeuds = Int(nbEnfants)!
case "boost": break
case "trou":
print("trou")
default :
let posX = attributeDict["posX"] as String!
if let n = NSNumberFormatter().numberFromString(posX) {
attObjets.posX = CGFloat(n)
}
let posY = attributeDict["posY"] as String!
if let n = NSNumberFormatter().numberFromString(posY) {
attObjets.posY = CGFloat(n)
}
let posZ = attributeDict["posZ"] as String!
if let n = NSNumberFormatter().numberFromString(posZ) {
attObjets.posZ = CGFloat(n)
}
let angleX = attributeDict["angleX"] as String!
if let n = NSNumberFormatter().numberFromString(angleX) {
attObjets.angleX = CGFloat(n)
}
let angleY = attributeDict["angleY"] as String!
if let n = NSNumberFormatter().numberFromString(angleY) {
attObjets.angleY = CGFloat(n)
}
let angleZ = attributeDict["angleZ"] as String!
if let n = NSNumberFormatter().numberFromString(angleZ) {
attObjets.angleZ = CGFloat(n)
}
let scaleX = attributeDict["scaleX"] as String!
if let n = NSNumberFormatter().numberFromString(scaleX) {
attObjets.scaleX = CGFloat(n)
}
let scaleY = attributeDict["scaleY"] as String!
if let n = NSNumberFormatter().numberFromString(scaleY) {
attObjets.scaleY = CGFloat(n)
}
let scaleZ = attributeDict["scaleZ"] as String!
if let n = NSNumberFormatter().numberFromString(scaleZ) {
attObjets.scaleZ = CGFloat(n)
}
let objetAcharger = monObjet(name: elementName,attributs: attObjets)
nodesAcharger.append(objetAcharger)
}
}
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?){
if (isProp){
}
if(isArbre){
}
}
func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError) {
print("Erreur dans le parseur XML")
}
在我看来,它无法解析下一个根元素(arbreRenduINF2990),但我无法找到问题