【问题标题】:Cocoa - Insert text between tagsCocoa - 在标签之间插入文本
【发布时间】:2010-09-16 15:41:58
【问题描述】:

我想知道如何在 Cocoa 中的 HTML 标记之间插入文本。我在 NSTextView 中显示源代码 - 示例:

<html>
<head>
<title>test</title>
</head>
<body>hello!</body>
</html>

上面的代码大小可能会有所不同,但是如果我想在&lt;head&gt; 标签之间的任何位置插入&lt;link rel="apple-touch-icon" href="webclip.png" /&gt;,我应该怎么做?

编辑:澄清一下,我不是在研究如何将文本插入到 NSTextView 中,而是在研究如何在 textview 中已经存在的 head 标记之间插入文本。我正在开发一个 HTML 编辑器。

谢谢! :)

【问题讨论】:

    标签: html cocoa tags nsstring


    【解决方案1】:

    之前没有编写过 HTML 编辑器,我不完全确定最好的方法。但是,您显然需要某种方式来解析 HTML。由于您使用的是 Cocoa,因此您有几个选择。

    • NSXMLParser 这是一个 SAX 风格的事件驱动解析器。您实现了NSXMLParserDelegate,当解析器遇到各种 XML 组件(元素、属性、文本等)时,会调用该方法
    • NSXML 这是一个基于树的 XML 解析器,我不确定它在 HTML 中的表现如何。但是,它确实具有能够运行 XPath 查询的优势,这在您查找特定元素时非常有用。
    • libxml 这是一个比 Cocoa 低得多的 C 库。然而,它是迄今为止三者中最有能力的。它既可以在事件驱动模式下工作,也可以在面向树的模式下工作。此外,它还具有特定于 HTML 的功能。不幸的是,它使用起来并不友好。您会发现自己在 C 字符串和 NSString 对象之间转换了很多东西。
      但是,我已经在 iOS 应用程序中广泛使用 libxml 来解析 XML,一旦您习惯了 C 风格的界面,它就可以很好地工作.我确信它在 Mac OS X 上也同样有效。这可能是我为您的问题推荐的方法。

    【讨论】:

    • 所有这三个都依赖于输入是有效的 XML(即 XHTML)。基于 SGML 的 HTML,包括 HTML 5 和未经验证的“标签汤”(并不是说它们是相互排斥的),几乎肯定会导致 XML 解析器阻塞并返回错误,而不是为您提供完整的文档解析。
    • 我确实使用 NSXMLParser,但仅用于读取 META 标签并获取 CSS 表的路径。我只需要知道如何在两个标签之间插入文本?有点像 NSTextView 的 insertText: 方法,但是在标签之间。
    【解决方案2】:

    text view 拥有一个text storage,它是mutable attributed string 的一种。你可以replace一个空范围用你要插入的字符串来插入它。

    当然,您需要解析 HTML 以确定 在哪里 插入它。

    【讨论】:

    • 我知道 - 我在问我如何确定我需要在哪里插入它?
    • 您询问了如何插入文本。这就是我回答的问题。如何解析 HTML 是一个不同的问题。
    猜你喜欢
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2010-12-30
    • 2013-05-04
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多