我们正在尝试使用SAX Parser解析XML。 我们的环境: Java版本:1.7
public void startElement(String uri, String localName, String qName, Attributes attributes){
if("wrappercell".equals(qName)){
elemenstack.push(attributes);
}else if("phrase".equals(qName)){
elemenstack.push(attributes);
}
}
在我们的startElement中,我们正在执行以下操作
public void endElement(String uri, String localName, String qName) throws SAXException {
if("wrappercell".equals(qName)){
System.out.println(((Attributes)elemenstack.pop()).getLength());
}else if("phrase".equals(qName)){
System.out.println(((Attributes)elemenstack.pop()).getLength());
}
}
在我们的EndElement中,我们想要引用在startelement
期间推送的属性public void startElement(String uri, String localName, String qName, Attributes attributes){
if("wrappercell".equals(qName)){
elementAttribute.put(attribute.getQName(1),attributes.getValue(1));
elemenstack.push(elementAttribute);
}else if("phrase".equals(qName)){
elementAttribute.put(attribute.getQName(1),attributes.getValue(1));
elemenstack.push(elementAttribute);
}
}
public void endElement(String uri, String localName, String qName) throws SAXException {
if("wrappercell".equals(qName)){
System.out.println(((HashMap<String,String>)elemenstack.pop()).size());
}else if("phrase".equals(qName)){
System.out.println(((HashMap<String,String>)elemenstack.pop()).size());
}
}
getLength()始终返回零。我们引用另一个Ques,它表示属性对象在每个startelement上具有相同的实例。
我们尝试过以下选项以外的其他选项,以便我们可以在功能中引用startelement值;
我们的解决方案
{{1}}
答案 0 :(得分:0)
不能直接回答您的问题,但使用StAX代替SAX会更容易解决这类问题。
SAX是一个推送解析器,意味着它会通过执行您的回调方法将事件推送给您。
StAX是一个拉解析器,意味着您从流中请求下一个事件。这允许您在代码中使用调用堆栈来控制“上下文”。
两者都附带Java 7。