【问题标题】:XMLElement with tags in between String字符串之间带有标签的 XMLElement
【发布时间】:2018-05-25 22:21:50
【问题描述】:

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

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" 标签显示为 <ph x="0" type="x-LPH"/> OBLIGATOIRE <ph x="1" type="x-LPH"/>(如果我们注意到“" 被替换为">")

谁能告诉我如何处理这个问题。

【问题讨论】:

    标签: swift macos cocoa nsxmlelement


    【解决方案1】:

    尝试逆向设计它应该是怎样的:检查XMLElement(xmlString: "<seg>Sample Text <ph x=\"1\" /> Here") 及其子项的结果。

    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 个孩子添加到父注释 segEle(不再需要 stringValue)。

    【讨论】:

    • 很好的答案@ctietze,我确实试过这个,它工作正常。唯一的问题是第三个孩子在新行显示,但所有 3 个孩子应该在同一行。它现在在多行中显示如下,我需要在与其他行相同的行中打印“here”。 示例文本在这里
    • 这可能是字符串输出的问题吗?您如何为segEle 生成字符串canonicalXMLStringPreservingComments(Bool)? (最好通过添加此详细信息来扩展您的问题。)
    • 再次感谢您的回答。对不起我之前的问题。如果第三个孩子在下一行或同一行,这不是问题,因为当我尝试打印它时,它们总是在同一行打印。再次感谢,将其标记为答案,因为它确实帮助了我。
    • 嗯,也许最好另开一个问题,在问题的示例代码中设置所有节点,询问如何修改生成的打印字符串?
    猜你喜欢
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多