Swift XMLParser 检测元素结束

Posted

技术标签:

【中文标题】Swift XMLParser 检测元素结束【英文标题】:Swift XMLParser Detect End of Element 【发布时间】:2021-12-15 00:50:08 【问题描述】:

我正在解析一个 SVG 文档,以提取其中包含的路径并将它们转换为 UIBezier 路径。但是,在某些文件中,路径位于具有转换的组中。数据的目的地没有层次结构,因此我必须从任何路径的包含组中提取转换,并使用 AffineTransform 将其应用于每个路径。

我可以成功检测到包含路径中的转换并获取所需的数据。因为源文件可能是分层的,所以转换中可能存在转换,所以我需要将它们存储在一个数组中。

如何检测元素的结尾,然后将变换从数组中弹出?解析器似乎没有响应关闭元素的"</g>" 标签

【问题讨论】:

成功了,谢谢! 我已为您添加了Community Wiki 答案。如果您想添加自己的答案,我很乐意将其删除。 【参考方案1】:

为了扩展 this solution,我创建了第二个 parse() 函数,它传递了 didEndElement 所在的 didStartElement,并且没有传递 attributesDict(因为它是最后一个元素并且没有属性)。

这会在所需条件下触发;从那里我可以构建我想要的代码。

这是一个示例:

func parser(_ parser: XMLParser,
                didEndElement elementName: String,
                namespaceURI: String?,
                qualifiedName qName: String?) 
        if elementName == "g" 
            transforms.removeLast()
        
    

从 Dan Donaldson 对此问题的编辑中复制了答案。

【讨论】:

以上是关于Swift XMLParser 检测元素结束的主要内容,如果未能解决你的问题,请参考以下文章

在 swift 中解析 XML 失败并出现 nil 错误

如何在 swift 中同时使用多个 xmlparsers?

GroovyXml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 )

UE4 C++解析与构建 XML 数据,XmlParser 与 tinyxml

忽略 xml.etree.ElementTree.XMLParser Python 中不匹配的标签

GroovyXml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 删除 Xml 文件中的节点 | 增加 Xml 文件中的节点 | 将修改后的 Xml 数据输出到文件中 )