字符串之间带有标记的 XMLElement

XMLElement with tags in between String

我正在创建一个 XML 文档并尝试在 XML 元素之间插入标签,如下所示

let tEle = XMLElement.element(withName: "xuv") as? XMLElement
let segEle = XMLElement.element(withName: "seg") as? XMLElement
segEle?.stringValue = "Sample Text Here"
tuvEle?.addChild(segEle!)

这工作正常,但对于 segEle,我想在文本之间添加一些标签,如 "Sample Text <ph x="1" type="x-LPH"/> Here",如果我们注意到我需要在字符串之间插入 "ph" 标签。

仅供参考:我试图在字符串之间插入 " <ph x=\"#\" type=\"x-LPH\"/> " 这段文本,但这没有用,因为在输出 xml 文件中 "ph" 标签显示为 &lt;ph x="0" type="x-LPH"/&gt; OBLIGATOIRE &lt;ph x="1" type="x-LPH"/&gt;(如果我们注意到“<”被替换为“<”,“>”被替换为“>”)

任何人都可以告诉我我们该如何处理这个问题。

尝试 backwards-engineer 它应该是怎样的:检查 XMLElement(xmlString: "<seg>Sample Text <ph x=\"1\" /> Here") 的结果及其 children.

Sample Text <element/> Here
^^^^^^^^^^^^~~~~~~~~~~^^^^^
    |          |         |
    |          |         --------- Text node
    |          |
    |          ----- XMLElement
    |
    ----------- Text node
  • XMLElement只适用于标签;
  • XMLElement.addChild 接受更通用的类型 XMLNode.
  • XMLNode.Kind 可以是 .text,这就是您要查找的内容,而不是更简单的 stringValue.

因此您必须将您的简单字符串值拆分为 3 个子节点:

  1. XMLNode.text(withStringValue: "Sample Text ") as? XMLNode
  2. XMLNode.element(withName: "Sample Text ") as? XMLElement
  3. XMLNode.text(withStringValue: " Here") as? XMLNode

然后将所有 3 个 children 添加到 parent 注释 segEle(不再需要 stringValue)。