如何用前缀解析XML?

时间:2012-04-10 09:19:35

标签: java xml-parsing

我有一些看起来像这样的XML:

<object-stream>
  <manhattan:state id="1" turn="0" start="red" current="red" type="select">
    <red id="2" displayName="Spieler 1" points="0">
      <segment id="3" size="1" usable="0" retained="11"/>
      <segment id="4" size="2" usable="0" retained="6"/>
      <segment id="5" size="3" usable="0" retained="4"/>
      <segment id="6" size="4" usable="0" retained="3"/>
      <card id="7" slot="0"/>
      <card id="8" slot="2"/>
      <card id="9" slot="3"/>
      <card id="10" slot="3"/>
    </red>
    <blue id="11" displayName="Spieler 2" points="0">
      <segment id="12" size="1" usable="0" retained="11"/>
      <segment id="13" size="2" usable="0" retained="6"/>
      <segment id="14" size="3" usable="0" retained="4"/>
      <segment id="15" size="4" usable="0" retained="3"/>
      <card id="16" slot="3"/>
      <card id="17" slot="4"/>
      <card id="18" slot="4"/>
      <card id="19" slot="4"/>
    </blue>
  </manhattan:state>
  [...]
</object-stream>

我想要一个简单的DOM表示,但是当我尝试用org.jdom.input.SAXBuilder解析它时,它会失败:

Exception in thread "main" org.jdom.input.JDOMParseException: Error on line 2:
The prefix "manhattan" for element "manhattan:state" is not bound.
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:533)
        [...]

我该如何做到这一点?

3 个答案:

答案 0 :(得分:2)

创建SAXBuilder时,请使用new SAXBuilder(false)停用验证。

http://xml.org/sax/features/namespaces属性设置为false以禁用命名空间替换。

答案 1 :(得分:1)

您的输入XML格式正确,但不是有效的XML文档。因此,首先您需要使其成为解析器正确解析的有效文档。看看你是否可以获得文档流并创建一个没有命名空间或前缀的新文档,并且你的解析应该可行。

答案 2 :(得分:0)

要摆脱错误,请使用func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier(BWNotificationPurchaseRewardCellIdentifier, forIndexPath: indexPath) as! BWNotificationTableViewCell cell.configureCellWithNotification(notifications[indexPath.row]) cell.delegate = self return cell } 作为父标记xmlns

object-stream