gpt4 book ai didi

ios - 解析 XML 时如何获取特定元素?

转载 作者:行者123 更新时间:2023-11-30 13:43:45 25 4
gpt4 key购买 nike

我只想从 XML 文档中获取“第一个子项目”。到目前为止,一切正常,但它似乎总是存储最后一个子项目。基本上,该程序直接读取 XML 文档,并在找到我想要的内容后停止。也许我不清楚如何在找到第一项后停止解析。我是否需要告诉程序在找到第一项后停止,或者将它们添加到数组中,然后挑选出特定的部分?任何帮助都会很棒。

XML文档

<file>main file
<item>
<subItem>first subitem</subItem>
</item>
</file>
<file>main file
<item>
<subItem>second subitem</subItem>
</item>
</file>
<file>main file
<item>
<subItem>third subitem</subItem>
</item>
</file>

Swift 文件

class parseThis {

var strXMLData:String = ""
var currentElement:String = ""
var passData:Bool=false
var passName:Bool=false
var itemNeeded = ""

// set up for parsing

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

currentElement=elementName;
if(elementName=="file" || elementName=="item" ||
elementName=="subItem")

{
if(elementName=="subItem"){


passName=false;
}
passData=true;
}
}

func parser(parser: NSXMLParser, didEndElement elementName: String,
namespaceURI: String?, qualifiedName qName: String?) {
currentElement="";
currentElement=elementName;
if(elementName=="file" || elementName=="item" ||
elementName=="subItem"){

if(elementName=="subItem"){
passName=false;
}
passData=false;
}

}
func parser(parser: NSXMLParser, foundCharacters string: String) {
if(passName){
strXMLData=strXMLData+"\n\n"+string
}

if(passData)
{

itemNeeded = string



}

最佳答案

一种 super 简单的看待方式是,您只需要 didFindCharactersdidEndElement。每次进入 didFindCharacters 时,您都将它们保存到一个变量中。然后,每次结束一个元素时,您都会检查这是否是正确的元素名称以及它是否是该元素名称类型的第一个。像这样的事情:

var resultString : String?
var finalResultObject : String?

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

public func parser(parser: NSXMLParser, foundCDATA CDATABlock: NSData)
{
resultString = String(data: CDATABlock, encoding: NSUTF8StringEncoding)
}

public func parser(parser: NSXMLParser, foundCharacters string: String)
{
if(resultString == nil)
{
resultString = ""
}
resultString! += string
}

public func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)
{
if(elementName == "subItem" && finalResultObject == nil)
{
//This is your first element of this type, save whatever you want.
finalResultObject = resultString
}
resultString = nil
}

public func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError)
{
//Log something in debug if you would like to.
}

关于ios - 解析 XML 时如何获取特定元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35233095/

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