我们正在对嵌入式/嵌套XML执行一些操作。我正在使用SAXParser解析整个XML文件。我想获得带有标签和值的整个嵌套XML。例如我的XML看起来像。我希望在<ANY_ELEMENT> ..... 标记内包含整个XML。<?xml version="1.0" encoding="UTF-8"?> <x:xMessage xmlns:x="http://www.connecture.com/integration/x" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.connecture.com/integration/x xMessageWrapper.xsd "> <x:xMessageHeader> <Version>850</Version> <Source>Source</Source> <Target>target</Target> <Timestamp>2013-12-31T12:00:00</Timestamp> <RequestID>123456</RequestID> <ResponseID>54321</ResponseID> <Priority>3</Priority> <Username>Deepak</Username> <Password>Kumar</Password> </x:xMessageHeader> <x:xMessageBody> <ANY-ELEMENT> <xEnveloped_834A1 xsi:schemaLocation="....." xmlns="......." .......................... .......................... some Complex XML .......................... .......................... .......................... </ANY-ELEMENT> </x:XMessageBody> </x:XMessage>处理程序类示例代码:public class MessageWrapperHandler extends DefaultHandler { private boolean bActualMessage = false; private String actualMessage = null; private long lengthActualMessage=0; public void startElement(String uri, String localName, String qName, Attributes attributes) { if (qName.equalsIgnoreCase("ANY-ELEMENT")) { bActualMessage = true; //lengthActualMessage=How to know the length of Child XML } } public void characters(char ch[], int start, int length) { if (bActualMessage) { actualMessage = new String(ch, start, length); //trying to get embedded XML bActualMessage = false; } }}但是由于XML内容后面是下一个元素,所以什么也没给我。所以如何实现它。编辑:您可以在/ANY-ELEMENT>之后随意修改XML,例如将内容添加到<ANY-ELEMENT> (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 我建议使用StAX(而不是SAX)(自Java SE 6开始,JDK / JRE中包含StAX实现)。 StAX与SAX相似,只是您拉(请求)事件而不是将事件推送给您。在下面的代码中,XMLStreamReader前进到ANY-ELEMENT元素。一旦它处于正确的位置,您就可以根据需要与其进行交互。import javax.xml.stream.*;import javax.xml.transform.stream.StreamSource;public class Demo { public static void main(String[] args) throws Exception { XMLInputFactory xif = XMLInputFactory.newFactory(); StreamSource xmlSource = new StreamSource("src/forum19559825/input.xml"); XMLStreamReader xsr = xif.createXMLStreamReader(xmlSource); Demo demo = new Demo(); demo.positionXMLStreamReaderAtAnyElement(xsr); demo.processAnyElement(xsr); } private void positionXMLStreamReaderAtAnyElement(XMLStreamReader xsr) throws Exception { while(xsr.hasNext()) { if(xsr.getEventType() == XMLStreamReader.START_ELEMENT && "ANY-ELEMENT".equals(xsr.getLocalName())) { break; } xsr.next(); } } private void processAnyElement(XMLStreamReader xmlStreamReaderAtAnyElement) { // TODO: Stuff System.out.println("FOUND IT"); }} (adsbygoogle = window.adsbygoogle || []).push({});
07-26 02:07