Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift-XMLParser//基于元素和属性选择节点_Swift_Xml_Xml Parsing - Fatal编程技术网

Swift-XMLParser//基于元素和属性选择节点

Swift-XMLParser//基于元素和属性选择节点,swift,xml,xml-parsing,Swift,Xml,Xml Parsing,我有一个使用Swift的XMLParser,它工作得很好。但是,有时会出现与我想要的实际节点同名的节点。所以当这些额外的节点出现时,is会把一切都搞砸。下面是一个好场景的示例。这已经被简化了一点来帮助解释 <master> <inputs> <input> <input> </inputs> <overlays> <overlay number="

我有一个使用Swift的XMLParser,它工作得很好。但是,有时会出现与我想要的实际节点同名的节点。所以当这些额外的节点出现时,is会把一切都搞砸。下面是一个好场景的示例。这已经被简化了一点来帮助解释

<master>
    <inputs>
        <input>
        <input>
    </inputs>
    <overlays>
        <overlay number="1">4</overlay>
        <overlay number="2">7</overlay>
    </overlays>
</master>

当我需要处理这个问题时,我使用了一些实例变量来跟踪我的位置

var inInputs = false
var inOverlays = false
然后更新didStartElement以查找输入,并将inInputs设置为true。并查找覆盖,并将inOverlays设置为true。对DiEndElement执行相同的操作,但将标志设置回false

然后可以将if-elementName==overlay{更新为if-elementName==overlay&&inOverlays{。对输入进行类似的更改

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
    if elementName == "overlay" {
            OverlayValue = ""
    }
}
func parser(_ parser: XMLParser, foundCharacters string: String) {
    OverlayValue?.append(string)
}

func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
    if elementName == "overlay" {
        OverlayXML.append(OverlayArray(value: OverlayValue!))
        OverlayValue = nil
    }

}
var inInputs = false
var inOverlays = false
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
    if elementName == "overlays" {
        inOverlays = true
    } else if elementName == "inputs" {
        inInputs = true
    } else if elementName == "overlay" && inOverlays {
        OverlayValue = ""
    }
}

func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
    if elementName == "overlays" {
        inOverlays = false
    } else if elementName == "inputs" {
        inInputs = false
    } else if elementName == "overlay" && inOverlays {
        OverlayXML.append(OverlayArray(value: OverlayValue!))
        OverlayValue = nil
    }
}