【问题标题】:How to parse .XML with special characters (GDataXML)如何使用特殊字符解析 .XML (GDataXML)
【发布时间】:2010-11-11 20:16:31
【问题描述】:

这是我的 .XML:

<table>
  <report field="FROZEN_BY" />
  <user name="Peter O'Toole" count="16">
    <row>
      <QTY value="2" />
      <EXTENSION value="SLDASM" />
    </row>
    <row>
      <QTY value="3" />
      <EXTENSION value="SLDDRW" />
    </row>
    <row>
      <QTY value="3" />
      <EXTENSION value="SLDPRT" />
    </row>
    <row>
      <QTY value="8" />
      <EXTENSION value="ZIP" />
    </row>
  </user>
</table>

我遇到的问题来自这行 xcode:

NSString* xPath = @"/table/user[@name='Peter O'Toole']/row";

当用户名包含任何 .XML 特殊字符时,我会收到错误:

XPath error : Invalid predicate
/table/user[@name='Peter O'Toole']/row
                          ^
xmlXPathEval: evaluation failed

我预料到了这一点,但是当我将行更改为:

NSString* xPath = @"/table/user[@name='Peter O&amp;Toole']/row";

我不再收到错误,但我也没有得到任何结果。

对此有什么想法吗?

【问题讨论】:

    标签: xml xcode gdata


    【解决方案1】:

    您是在字符串文字中的 XPath 表达式中,而不是在 XML 中,所以 &amp;amp; 根本不是转义符(即使是转义符,它也会是 &amp; 而不是 ')。您实际上是在将 name 属性与值 Peter O&amp;amp;Toole 匹配,即在 XML 中将写入为 name="Peter O&amp;amp;amp;Toole" 的属性。

    XPath 字符串文字可以使用任何一种类型的引号,所以这个表达式可以工作:

    /table/user[@name="Peter O'Toole"]/row
    

    其中,包含在 Obj-C 字符串文字中需要再次转义双引号:

    NSString* xPath = @"/table/user[@name=\"Peter O'Toole\"]/row";
    

    如果您在要匹配的字符串中同时包含两种引号,那么问题就更大了。 XPath 字符串文字没有转义方案,因此不可能在其中声明一个同时包含 "' 的值。您必须通过连接只有一种引号类型的字符串来做到这一点。因此,对于任意字符串,手动迭代和比较可能比使用 XPath 更容易。

    【讨论】:

    • 谢谢,我真的没想到。我将在其中包含一些带有 " 和 ' 的东西,但这是直接通过代码,所以没有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2011-01-28
    相关资源
    最近更新 更多