如何在Swift中使用NSXMLParser解析具有2个根元素的xml文档?

如何在Swift中使用NSXMLParser解析具有2个根元素的xml文档?,xml,swift,element,nsxmlparser,Xml,Swift,Element,Nsxmlparser,我正在尝试使用Swift中的NSXMLParser解析这个XML文档。 我的问题是我能够解析属性元素,比如 PointsButoir,Difficulte ,etc. 但是当到达困难元素和属性的结束标记时,发生了一个错误。 以下是我编写代码的方式: func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, a

我正在尝试使用Swift中的NSXMLParser解析这个XML文档。 我的问题是我能够解析属性元素,比如

PointsButoir,Difficulte ,etc.
但是当到达
困难
元素和
属性
的结束标记时,发生了一个错误。 以下是我编写代码的方式:

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),但我找不到问题

格式良好的XML不能包含多个根元素。如果你想解析它,你必须把它分成单独的流,每个流包含一个根元素。谢谢你的回复,但我只需要处理一个xml文件。我不知道如何分割,你有一个XML文件,但你可以对它进行预处理,然后在内存中将它分割成几个不同的部分。你没有一个XML文件。您有一个文本文件。正如@JimGarrison所说,XML不能有多个根元素。您有两种选择,这两种选择都要求您将文件视为文本,而不是XML,因为它不是XML:(1)将两个根元素拆分为两个XML文档(正如Jim建议的那样),或者(2)用单个根元素包装两个根元素。如果您的“XML”在其他方面都很好,那么在采取上述两种方法之一之后,您将能够对数据使用XML解析器和工具。要么在这里粘贴所有内容,要么使用Pastebin。记住清理所有敏感信息。