我正在解析一些XML(MS-Word的document.xml
有效载荷.docx
,如果这很重要的话)我需要严格正确的字符偏移。我正在使用Cocoa(OS X)的NSXMLDocument
系列进行树分析。我解决了大多数问题,除了解析器报告空格字符作为单个空格运行。
本文档中用于运行文本的原子是<w:t/>
。在某些情况下,有一个单空间运行:
<w:t xml:space="preserve"> </w:t>
在我实例化顶级XML对象时,空格被禁止,直到我提供了NSXMLDocumentTidyXML
选项:
let xmlDocument = try? NSXMLDocument(data: fileData, options: NSXMLDocumentTidyXML)
很好,但并不能解决所有问题。请在XML内容中考虑这一点:
<w:t>available to be digitized and posted. But while there</w:t>
您可能会注意到这段时间后有两个空格。表示NSXMLElement
的{{1}}以及包含它的任何元素都坚持在句点之后只有一个空格,如<w:t/>
所报告的那样以及节点的调试表示:
theElement.stringValue!
我可以忍受这个,但我的计数必须与Pages,Word和<w:t>available to be digitized and posted. But while there</w:t>
中的渲染器保持一致,所有这些都保留了空格的运行。
我尝试通过对所有这些元素强加NSAttributedString
来强制执行<w:t/>
元素:
xml:space="preserve"
我准备相信这是不好的代码,但无论如何,它对问题没有影响。到目前为止可能已经太晚了。
如何让Cocoa XML树解析器停止将空格划分到一个空间?当然这是一个已经解决的问题 - 世界并没有因为空间崩溃而辞职。
我可以避免使用第三方XML解析器吗?