1

以下是我的xml:

 <Body>
  <tag1 xmlns=""> <innerTag></innerTag> </tag1>
  </Body>

问题是我无法得到里面的字符串<tag1></tag1>,也就是说 <innerTag></innerTag>。以下是我的逻辑:

public void startElement(final String uri, final String localName,
            final String qName, final Attributes attributes)
            throws SAXException {
        if ("tag1".equalsIgnoreCase(qName)){
            inTag1 = true;
            System.out.println("start");
        }
}


public void endElement(final String uri, final String localName,
            final String qName) throws SAXException {
        if ("tag1".equalsIgnoreCase(qName)) {
            System.out.println("end");
            inTag1 = false;
        }
}

public void characters(final char[] ch, final int start, final int length) {

        if (inTag1) {
            System.out.println("@@@" + new String(ch, start, length));
        }
    }
}

但它给了我空的输出。任何人都可以帮忙。

4

2 回答 2

1

在您对 UVM 的回答的评论中,您写道

其实inner tag就是这个xml里面的一种xml。所以我想要一个整体

没有办法告诉 SAX 解析器不处理元素内的所有 XML 并将整个内容作为字符串返回。本质上,您有两个选择:

  • 通过监听所有 SAX 事件并自己构建 XML 字符串来重构 XML 字符串,或者
  • 如果您可以控制要解析的 XML 文档,请将它们的格式更改为类似

    <Body>
      <tag1 xmlns=""><![CDATA[ <innerTag></innerTag> ]]></tag1>
    </Body>
    
于 2012-09-23T10:21:56.500 回答
0

您需要"innerTag"检查"tag1"

if ("innerTag".equalsIgnoreCase(qName)){
            inTag1 = true;
            System.out.println("start");
        }

基本上你的 innerTag 是 tag1 的一个子元素。所以 SAX 解析器继续解析,因为它直到一个有效的 XML 元素。

于 2012-09-23T10:06:27.203 回答