Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SAX查找结束标记_Java_Xml_Parsing_Xml Parsing_Sax - Fatal编程技术网

Java SAX查找结束标记

Java SAX查找结束标记,java,xml,parsing,xml-parsing,sax,Java,Xml,Parsing,Xml Parsing,Sax,使用默认处理程序类查找相应的XML标记是否可行?例如 <Object class="my class"> <Property> <Value>1</Value> </Property> </Object> <Object class="my next class"> <Property> <Value>1</Value> </Propert

使用默认处理程序类查找相应的XML标记是否可行?例如

<Object class="my class">
  <Property>
    <Value>1</Value>
  </Property>
</Object>
<Object class="my next class">
  <Property>
    <Value>1</Value>
  </Property>
</Object>

1.
1.

我想使用startElement()和endElement()方法,但无法在较高级别上解决这个问题。我所能想到的就是使用计数器,想看看是否有人听说过一种更简单的方法。我想根据这两个对象类的开始和结束时间,将它们拆分为两个单独的字符串。有什么建议吗?

您需要对默认处理程序类进行子类化(在
startElement
endElement
期间,您无论如何都需要这样做才能进行任何处理)。当为
Object
标记调用
startElement
时,创建一个对象并将其引用存储在处理程序的实例变量中。调用
endElement
时,将对象保存在某处,并将引用设置为
null
。同时,当您接收到其他
startElement
endElement
事件(对于
属性
标记)时,对引用对象进行操作


对第二个对象重复此操作。最后,您将保存对象的两个不同实例。

您使用什么库来解析此XML?导入javax.XML.parsers.SAXParser;如果我有,你的方法还能用吗?@EricCallan-如果你有嵌套的
Object
标记,那么描述的方法就不能用了。然而,只要稍作改动——使用一堆引用——基本思想就可以实现。当您获得一个对象的
startElement
事件并且已经有一个对象引用时,在创建新对象之前,将现有引用推送到堆栈上。在
endElement
事件中,仅当堆栈为空时,才将引用设置为
null
;否则,将其设置为弹出时堆栈中的内容。