Two formats are the same to XML.

解决方案 »

  1.   

    这个?
    他们在sax中的输出都是一样的呀。
    public class TestParseXml
    {
        private static String tag;
        class MyHandler
            extends org.xml.sax.helpers.DefaultHandler
        {
            private String part = null;
            private String getAttr(org.xml.sax.Attributes t)
            {
                String s="";
                for(int i=0;i<t.getLength();i++)
                {
                    s=s+" " +t.getQName(i) +"=\""+ t.getValue(i)+"\"";
                }
                return s;
            }        public void startElement(String uri, String localName, String qName,
                                     org.xml.sax.Attributes attributes)
            {
                if (qName.equals(tag))
                {
                    part = "<" + tag + getAttr(attributes)+ ">";
    //                part="";
                }
                else if (part != null)
                {
                    part += "<" + qName + getAttr(attributes) + ">";
                }
            }
            public void endElement(String uri, String localName, String qName)
            {
                if (qName.equals(tag))
                {
                    part += "</" + tag + ">";
                    System.out.println(part);
                }
                else
                {
                    part += "</" + qName + ">";
                }
            }
            public void characters(char[] ch, int start, int length)
            {
                part += new String(ch, start, length);
            }
        }
        public static void setFilterTag(String tag)
        {
            TestParseXml.tag = tag;
        }    public static java.io.InputStream getXmlStream()
        {
            String xml = "<root><r/><r><k p=\"3\"/><xx test=\"hello!\">ddd</xx></r><c><p name=\"5\">erw</p></c><r>trter</r><aa><r>ff</r></aa></root>";
            setFilterTag("r");
            return new java.io.ByteArrayInputStream(xml.getBytes());
        }
        public static void main(String[] args) throws Exception
        {
            javax.xml.parsers.SAXParserFactory saxParserFtr =
                javax.xml.parsers.SAXParserFactory.newInstance();
            javax.xml.parsers.SAXParser parser = saxParserFtr.newSAXParser();
            java.io.InputStream is = getXmlStream();
            parser.parse(new org.xml.sax.InputSource(is),
                         new TestParseXml().new MyHandler());
        }
    }会输出:
    <r></r>
    <r><k p="3"></k><xx test="hello!">ddd</xx></r>
    <r>trter</r>
    <r>ff</r其中,<k p="3"></k>就是代码中的<k p="3"/>。