From 189ecf0d0f5ca5385329cd2ab4294d66e4923a52 Mon Sep 17 00:00:00 2001 From: Miguel Chacon Date: Fri, 22 Sep 2023 17:12:17 +0100 Subject: [PATCH] Fix bug with CData elements #79 --- pom.xml | 2 +- resources/features/bugs/cellContent.feature | 6 ++++++ src/com/github/miachm/sods/OdsReader.java | 1 - .../miachm/sods/XmlReaderInstanceEventImpl.java | 11 ++++++++--- tests/steps/SpreadsheetCucumber.java | 2 +- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 7a0ad26..49314e3 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.github.miachm.sods SODS jar - 1.6.0 + 1.6.3 Simple ODS library A library for load/save ODS files in java. diff --git a/resources/features/bugs/cellContent.feature b/resources/features/bugs/cellContent.feature index a9894e0..aa1d1e9 100644 --- a/resources/features/bugs/cellContent.feature +++ b/resources/features/bugs/cellContent.feature @@ -23,3 +23,9 @@ Feature: Bugs related to invalid cell value content in SODS When the client creates a Range with 1,1,1,1 Then the formula of the range is "SUM(Operations!C:C)" + Scenario: Data tags returns a null value + When load a spreadsheet from the resource "emptyCell" + When get the first sheet + Then the cell values are: + | Test 1 | + | A | diff --git a/src/com/github/miachm/sods/OdsReader.java b/src/com/github/miachm/sods/OdsReader.java index 3bbd1a8..ddaa522 100644 --- a/src/com/github/miachm/sods/OdsReader.java +++ b/src/com/github/miachm/sods/OdsReader.java @@ -505,7 +505,6 @@ private void readCellText(XmlReaderInstance cellReader, Range range) { } else { s.append("\n"); } - // Add content of any contained text:span tags XmlReaderInstance spanElement = textElement.nextElement("text:s", XmlReaderInstance.CHARACTERS); diff --git a/src/com/github/miachm/sods/XmlReaderInstanceEventImpl.java b/src/com/github/miachm/sods/XmlReaderInstanceEventImpl.java index 9a305a7..f275b4e 100644 --- a/src/com/github/miachm/sods/XmlReaderInstanceEventImpl.java +++ b/src/com/github/miachm/sods/XmlReaderInstanceEventImpl.java @@ -5,6 +5,7 @@ import javax.xml.stream.XMLStreamReader; import java.util.HashMap; import java.util.Map; +import javax.xml.stream.XMLStreamConstants; class XmlReaderInstanceEventImpl implements XmlReaderInstance { private XMLStreamReader reader; @@ -24,7 +25,7 @@ class XmlReaderInstanceEventImpl implements XmlReaderInstance { String value = reader.getAttributeValue(i); atributes.put(name, value); } - else if (reader.isCharacters()) { + else if (isCharacters(reader)) { characters = reader.getText(); end = true; } @@ -58,7 +59,7 @@ else if (reader.isEndElement()) { return null; } } - else if (reader.isCharacters()) { + else if (isCharacters(reader)) { if (contains(names, CHARACTERS)) return new XmlReaderInstanceEventImpl(reader, CHARACTERS); } @@ -85,7 +86,11 @@ public String getContent() public String getTag() { return tag; } - + + private boolean isCharacters(XMLStreamReader reader) { + return reader.isCharacters() || reader.getEventType() == XMLStreamConstants.CDATA; + } + private String qNameToString(QName qName) { return qName.getPrefix() + ":" + qName.getLocalPart(); diff --git a/tests/steps/SpreadsheetCucumber.java b/tests/steps/SpreadsheetCucumber.java index 27e07d1..7388c1b 100644 --- a/tests/steps/SpreadsheetCucumber.java +++ b/tests/steps/SpreadsheetCucumber.java @@ -246,7 +246,7 @@ public void the_cell_values_are(DataTable dataTable) throws Throwable { Object[][] items = World.sheet.getDataRange().getValues(); for (int i = 0; i < table.size(); i++) { - for (int j = 0; j < table.size(); j++) { + for (int j = 0; j < table.get(i).size(); j++) { String value = table.get(i).get(j); if (value.equals("")) value = null;