classpathx-xml
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Classpathx-xml] GNU JAXP Bug report: Attribute value including &


From: Ito Kazumitsu
Subject: [Classpathx-xml] GNU JAXP Bug report: Attribute value including &
Date: Mon, 1 Sep 2003 17:18:09 +0900
User-agent: SEMI/1.14.3 (Ushinoya) FLIM/1.14.3 (Unebigory ōmae) APEL/10.3 Emacs/20.7 (i386-*-windows98.2222) MULE/4.1 (AOI) Meadow/1.14 (AWSAKA:62)

Hi,

I have found a case where an attribute value is treated
incorrectly.

If you write <a b='X&amp;Y&amp;Z'>, the value of attribute b
should be 'X&Y&Z', but 'X&' and 'Y&' becomes characters nodes
and only 'Z' becomes the value of b.

I am using gnu.xml.aelfred2.* included in kaffe.  They are
dated as follows

-rw-rw-r--   1 ito      ito          5318 Dec  3  2002 JAXPFactory.java
-rw-rw-r--   1 ito      ito         35362 Feb  7  2003 SAXDriver.java
-rw-rw-r--   1 ito      ito        128240 Dec  3  2002 XmlParser.java
-rw-rw-r--   1 ito      ito          9792 Dec 22  2002 XmlReader.java

Here is the test case.

$ cat TestSAX2.java
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;

public class TestSAX2 {

    public static void main(String[] args) throws Exception {
        String uri = args[0];
        new TestSAX2(uri);
    }

    public TestSAX2(String uri) throws Exception {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setFeature("http://xml.org/sax/features/namespaces";, true);
        factory.setFeature("http://xml.org/sax/features/namespace-prefixes";, 
false);
        XMLReader xr = factory.newSAXParser().getXMLReader();
        xr.setContentHandler(new MyHandler());
        xr.parse(uri); 
    }

private class MyHandler extends DefaultHandler {

    public void startElement(
        String nsURI,
        String localName,
        String qName,
        Attributes atts
    ) {
        System.out.println("START ELEMENT");
        System.out.println(" URI = " + nsURI);
        System.out.println(" local = " + localName);
        System.out.println(" qname = " + qName);
        System.out.println("ATTRIBUTES");
        for (int a=0; a<atts.getLength(); a++) {
            System.out.println(" URI = " + atts.getURI(a));
            System.out.println(" local = " + atts.getLocalName(a));
            System.out.println(" qname = " + atts.getQName(a));
            System.out.println(" value = " + atts.getValue(a));
        }
        System.out.println("END ATTRIBUTES");
    }

    public void endElement(
        String nsURI,
        String localName,
        String qName
    ) {
        System.out.println("END ELEMENT");
        System.out.println(" URI = " + nsURI);
        System.out.println(" local = " + localName);
        System.out.println(" qname = " + qName);
    }

    public void characters(
        char ch[],
        int start,
        int length
    ) {
        System.out.println("CHARACTERS");
        System.out.println(new String(ch, start, length));
        System.out.println("END CHARACTERS");
    }

}

}
$ cat 01.xml
<a0>
<a b='X&amp;Y&amp;Z'>test</a>
</a0>
$ java TestSAX2 file://$HOME/javatest/01.xml
START ELEMENT
 URI = 
 local = a0
 qname = a0
ATTRIBUTES
END ATTRIBUTES
CHARACTERS
X&
END CHARACTERS
CHARACTERS
Y&
END CHARACTERS
START ELEMENT
 URI = 
 local = a
 qname = a
ATTRIBUTES
 URI = 
 local = b
 qname = b
 value = Z
END ATTRIBUTES
CHARACTERS
test
END CHARACTERS
END ELEMENT
 URI = 
 local = a
 qname = a
END ELEMENT
 URI = 
 local = a0
 qname = a0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]