diff --git a/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/XmlTreeBuilder.java b/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/XmlTreeBuilder.java index 7d1748bd58e9..7a287cdaa070 100644 --- a/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/XmlTreeBuilder.java +++ b/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/XmlTreeBuilder.java @@ -128,6 +128,8 @@ public BXml parse() { readComment(xmlStreamReader); break; case CDATA: + readCData(xmlStreamReader); + break; case CHARACTERS: readText(xmlStreamReader); readNext = true; @@ -158,6 +160,10 @@ private void readPI(XMLStreamReader xmlStreamReader) { siblingDeque.peek().add(xmlItem); } + private void readCData(XMLStreamReader xmlStreamReader) { + siblingDeque.peek().add(new XmlText(xmlStreamReader.getText())); + } + private void readText(XMLStreamReader xmlStreamReader) throws XMLStreamException { StringBuilder textBuilder = new StringBuilder(); while (xmlStreamReader.getEventType() == CHARACTERS) { diff --git a/langlib/langlib-test/src/test/resources/test-src/xmllib_test.bal b/langlib/langlib-test/src/test/resources/test-src/xmllib_test.bal index 34843030f15b..794e26c793db 100644 --- a/langlib/langlib-test/src/test/resources/test-src/xmllib_test.bal +++ b/langlib/langlib-test/src/test/resources/test-src/xmllib_test.bal @@ -943,6 +943,10 @@ function fromStringTest() { if !(d[3] is xml:Comment) { panic error("Assertion error: not a comment"); } + + string xmlString = string ``; + xml xmlWithCData = checkpanic xml:fromString(xmlString); + assertEquals(xmlWithCData, xml `OK`); } function testXmlIteratorNextInvocations() {