0

我正在使用 NSXMLParser 为 url 解析 xml。一些元素在文本中包含特殊字符以及斜体。

  • 请在文本中找到以下带有斜体标签的 xml 元素:
<name>Verify Settings<i>i</i>patch level</name>

NSXMLParser 打破文本并给出输出:验证设置

有没有办法解析元素之间的斜体文本?

  • 请在下面找到带有特殊字符的 xml:
<impact> In 2003, the ¿shared APPL_TOP¿ architecture was introduced, which allowed the sharing of a single APPL_TOP, however the tech stack
 ·  Reduced disk space requirements 
 ·  Reduced maintenance
 ·  Reduced administrative costs 
 ·  Reduced patching down time 
 ·  Less complex to add additional nodes, making scalability easier
 ·  Complexity of instance reduced 
 ·  Easier backups 
 ·  Easier cloning</impact>

它打破文本并给出输出: e成本·减少修补停机时间·添加额外节点的复杂性降低,使可扩展性更容易·降低实例的复杂性·更容易备份·更容易克隆

关于如何使用 NSXMLParser 解析文本中的斜体标签和特殊字符的任何建议?


这是我的foundCharacters代码:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if (!self.currentStringValue) {
    // currentStringValue is an NSMutableString instance variable
    self.currentStringValue = [[NSMutableString alloc] init];
}
[self.currentStringValue appendString:string];
} 
4

1 回答 1

1

这两者看起来不像是 XML 解析问题,而是 XML 生成问题。你是如何生成这个 XML 的?感觉就像是手动生成的 XML,而不是由适当的 XML 库生成的东西。

从解析器的角度来看您的 XML:NSXMLParser应该如何知道元素<i>中的 HTML <name>,而不是新的 XML 标记本身?!?如果这确实是 XML 的样子,那么您真的应该修复您的 Web 服务。

例如,用斜体查看您的问题,问题是<i>看起来像一个新的元素名称。一般来说,这应该表示为:

<name>Verify Settings&lt;i&gt;i&lt;/i&gt;patch level</name>

或者作为

<name><![CDATA[Verify Settings<i>i</i>patch level]]></name>

属性的这种编码name通常由在 Web 服务中进行 XML 编码的 API 完成。通常,您无需执行任何操作即可获得此行为。但是,如果您的 Web 服务手动创建自己的 XML,则可能会为您提供您在原始问题中描述的那种输出。

在第二个示例中,我会认为 XML 中的字符必须符合<?xml ...>标记中列出的字符集,例如:

<?xml version="1.0" encoding="ISO-8859-1"?>

你的<?xml ...>标签说什么?列出的字符是否属于那里列出的编码?


Looking at your revised foundCharacters, the new rendition is much better. The previous rendition suffered from a problem, insofar as it assumed that foundCharacters would be called only once for any given pair of <name> and </name> tags. That is not necessarily the case. Your latest rendition correctly creates currentStringValue if it needs to, and then appends to it. That is the correct approach, consistent with the examples in the Apple documentation. You might only want to do that if you're parsing one of the elementName types that you care about (e.g. <name>), but with that minor caveat, this new rendition looks much better.

于 2013-03-08T22:04:59.303 回答