无法使用sax解析器解析标记

时间:2012-09-23 09:42:16

标签: java sax saxparser

以下是我的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));
        }
    }
}

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

2 个答案:

答案 0 :(得分:1)

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

  

实际上内部标记是这个xml中的一种xml。所以我想把它作为一个整体

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

  • 通过监听所有SAX事件并自己构建XML字符串来重构XML字符串,或者
  • 如果您控制了您尝试解析的XML文档,请将其格式更改为

    <Body>
      <tag1 xmlns=""><![CDATA[ <innerTag></innerTag> ]]></tag1>
    </Body>
    

答案 1 :(得分:0)

您需要检查"innerTag"

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

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