Reading escape characters with XMLStreamReader

前端 未结 2 1442
感情败类
感情败类 2021-01-05 15:20

Hi I have a problem reading escape characters inside an xml using XMLStreamReader.

for instance I have this element :

foo&bar

        
相关标签:
2条回答
  • 2021-01-05 15:43

    I'm not sure what the problem is - my test produces the results you expect.

    Running

    XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
    XMLStreamReader reader = xmlInputFactory.createXMLStreamReader(
         new StringReader("<tag>foo&amp;bar</tag>"));
    PrintWriter pw = new PrintWriter(System.out, true);
    while (reader.hasNext())
    {
        reader.next();
        pw.print(reader.getEventType());
        if (reader.hasText())
            pw.append(' ').append(reader.getText());
        pw.println();
    }
    

    Produces

    1
    4 foo
    4 &
    4 bar
    2
    8
    

    On JDK 1.6.0.11 - rather old I know. I'll upgrade and post back if results differ.

    One thing to bear in mind is that the XMLStreamReader can (and does!) break up character data into several blocks, as you see above - the repeated 4 events (4=CHARACTERS) indicates the text of the element is sent as 3 events.

    0 讨论(0)
  • 2021-01-05 15:52

    To force XMLStreamReader to return a single string, you have to set the javax.xml.stream.isCoalescing property as indicated by the XMLStreamReader#next() documentation:

    XMLInputFactory factory = XMLInputFactory.newInstance();
    factory.setProperty("javax.xml.stream.isCoalescing", true);  // decode entities into one string
    XMLStreamReader xmlStreamReader = factory.createXMLStreamReader(stringReader);
    
    0 讨论(0)
提交回复
热议问题