在 Swift 中生成带有属性的 XML 元素

Posted

技术标签:

【中文标题】在 Swift 中生成带有属性的 XML 元素【英文标题】:Generating XML element with attributes in Swift 【发布时间】:2020-09-21 05:05:01 【问题描述】:

我正在学习 Swift,并开始了一个小项目来读取 csv 文件并发出 XML 文件。我有这个代码-

import Cocoa
import Foundation


let base = XMLElement(name: "root")
let fcpxxml = XMLDocument(rootElement: base)
var build =  XMLElement(name: "clip", stringValue:"myClip" )
base.addChild(build)
print(fcpxxml.xmlString)

它输出 -

<root><clip>myClip</clip></root>

我需要添加属性。在我看到的 Apple 开发者文档中 element(withName:children:attributes:)

我试图用它来创建一个以 nil 属性开头的元素 -

var base1 = element(withName name: "angle", children: nil, attributes: nil )

我得到错误

使用未解析的标识符“元素”

我不明白为什么这不起作用,我正在寻找一个可以让我生成的代码示例 -

<root><clip name = "myClip"> </clip></root>

【问题讨论】:

【参考方案1】:

您似乎在寻找this method - attribute(withName:stringValue:)。它返回一个XMLNode,您可以使用addAttribute 将其添加到XMLElement

let base = XMLElement(name: "root")
let fcpxxml = XMLDocument(rootElement: base)
let build =  XMLElement(name: "clip", stringValue:"")
build.addAttribute(XMLNode.attribute(withName: "name", stringValue: "myClip") as! XMLNode)
base.addChild(build)
print(fcpxxml.xmlString) // <root><clip name="myClip"></clip></root>

您找到的方法element(withName:children:attributes:) 也可用于创建您的 XML,但需要大量转换。

let base = XMLNode.element(withName: "root", children: [
    XMLNode.element(withName: "clip",
                    children: nil,
                    attributes: [
                        XMLNode.attribute(withName: "name", stringValue: "myClip") as! XMLNode
                    ]) as! XMLNode
], attributes: nil) as! XMLNode

【讨论】:

以上是关于在 Swift 中生成带有属性的 XML 元素的主要内容,如果未能解决你的问题,请参考以下文章

使用 databricks 在 Spark(scala) 中生成具有属性和值的 XML

如何在未绑定的 xml 结构中生成逗号分隔的字符串

在 XML 中生成带有内置到期日期的简单许可证 - 我这样做对吗?

从.NET中生成的XML中删除命名空间[重复]

在 Swift 中过滤对象数组并求和它们的属性

带有属性而不是元素的 Json 到 XML