/** * Get the next text content of an xml element as integer. Text content is {@code * <element>123</element>} * * @return The xml element's text content as integer or 0 if empty tag like {@code * <element></element>} * @throws IOException */ public int nextTextContentAsInt() throws IOException { // TODO natively support // case when <element></element> is empty, then return default value which is "0" for long String content = nextTextContent(); if (content.equals("")) { return 0; } return Integer.parseInt(content); }
/** * Get the next text content of an xml element as long. Text content is {@code * <element>123</element>} * * @return The xml element's text content as long or 0 if empty tag like {@code * <element></element>} * @throws IOException */ public long nextTextContentAsLong() throws IOException { // TODO natively support // case when <element></element> is empty, then return default value which is "0" for long String content = nextTextContent(); if (content.equals("")) { return 0; } return Long.parseLong(content); }
/** * Get the next text content of an xml element as boolean. Text content is {@code * <element>123</element>} * * @return The xml element's text content as boolean or false if empty tag like {@code * <element></element>} * @throws IOException */ public boolean nextTextContentAsBoolean() throws IOException { // TODO natively support // case when <element></element> is empty, then return default value which is "false" for boolean String content = nextTextContent(); if (content.equals("")) { return false; } return Boolean.parseBoolean(content); }
/** * Get the next text content of an xml element as double. Text content is {@code * <element>123</element>} * * @return The xml element's text content as double or 0.0 if empty tag like {@code * <element></element>} * @throws IOException */ public double nextTextContentAsDouble() throws IOException { // TODO natively support // case when <element></element> is empty, then return default value which is "0.0" for double String content = nextTextContent(); if (content.equals("")) { return 0; } return Double.parseDouble(content); }
@Override public void fromXml(XmlReader reader, TikXmlConfig config, Company value) throws IOException { value.otherText = reader.nextTextContent(); } });
@Override public void fromXml(XmlReader reader, TikXmlConfig config, Company value) throws IOException { value.legalForm = reader.nextTextContent(); } });
@Override public void fromXml(XmlReader reader, TikXmlConfig config, Company value) throws IOException { value.otherText = reader.nextTextContent(); } });
@Override public void fromXml(XmlReader reader, TikXmlConfig config, Company value) throws IOException { value.legalForm = reader.nextTextContent(); } });
@Override public void fromXml(XmlReader reader, TikXmlConfig config, Company value) throws IOException { value.otherText = reader.nextTextContent(); } });
@Override public void fromXml(XmlReader reader, TikXmlConfig config, Company value) throws IOException { value.otherText = reader.nextTextContent(); } });
@Override public void fromXml(XmlReader reader, TikXmlConfig config, Company value) throws IOException { try { value.founded = config.getTypeConverter(Date.class).read(reader.nextTextContent()); } catch (Exception e) { throw new IOException(e); } } });
@Override public void fromXml(XmlReader reader, TikXmlConfig config, Company value) throws IOException { try { value.founded = config.getTypeConverter(Date.class).read(reader.nextTextContent()); } catch (Exception e) { throw new IOException(e); } } });
@Override public List<String> fromXml(XmlReader reader, TikXmlConfig config) throws IOException { List<String> list = new ArrayList<>(); while (reader.hasElement()) { // <a>a<a> // <b>b</b> // <c>c</c> reader.beginElement(); reader.nextElementName(); // Ignore element name String value = reader.nextTextContent(); list.add(value); reader.endElement(); } return list; }
@Test public void emptyTextContentString() throws IOException { String xml = "<empty />"; XmlReader reader = readerFrom(xml); reader.beginElement(); Assert.assertFalse(reader.hasAttribute()); reader.nextElementName(); Assert.assertEquals("", reader.nextTextContent()); reader.endElement(); String xml2 = "<empty></empty>"; XmlReader reader2 = readerFrom(xml2); reader2.beginElement(); Assert.assertFalse(reader2.hasAttribute()); reader2.nextElementName(); Assert.assertEquals("", reader2.nextTextContent()); reader2.endElement(); }
@Test public void missingClosingCDATA() throws IOException { String cdata = "< hello <> & cdata</foo>"; String xml = "<foo>NormalValue<![CDATA[" + cdata + "nextvalue</foo>"; XmlReader reader = readerFrom(xml); try { Assert.assertTrue(reader.hasElement()); reader.beginElement(); Assert.assertEquals("foo", reader.nextElementName()); Assert.assertFalse(reader.hasAttribute()); Assert.assertTrue(reader.hasTextContent()); Assert.assertEquals("NormalValue", reader.nextTextContent()); exception.expect(IOException.class); exception.expectMessage("<![CDATA[ at /foo/text() has never been closed with ]]>"); Assert.assertEquals(cdata, reader.nextTextContent()); } finally { reader.close(); } }
@Test public void unclosedElement() throws IOException { String xml = "<fooElement a=\"qwe\">This is the text"; XmlReader reader = readerFrom(xml); try { reader.beginElement(); reader.nextElementName(); reader.nextAttributeName(); reader.nextAttributeValue(); exception.expect(IOException.class); exception.expectMessage( "Unterminated element text content. Expected </fooElement> but haven't found at path /fooElement/text()"); reader.nextTextContent(); } finally { reader.close(); } }
@Test public void readObjectWithMultilineComment() throws IOException { String xml = "<element><!-- comment \n multiline \n -->Value</element>"; XmlReader reader = readerFrom(xml); try { Assert.assertTrue(reader.hasElement()); reader.beginElement(); Assert.assertEquals("element", reader.nextElementName()); Assert.assertTrue(reader.hasTextContent()); Assert.assertEquals(reader.nextTextContent(), "Value"); reader.endElement(); Assert.assertEquals(XmlReader.XmlToken.END_OF_DOCUMENT, reader.peek()); } finally { reader.close(); } }
@Test public void jsonArrayTextContent() throws IOException { String xml = "<element><![CDATA[[{a:'b'}, {b:'c'}]]]></element>"; XmlReader reader = readerFrom(xml); try { Assert.assertTrue(reader.hasElement()); reader.beginElement(); Assert.assertEquals("element", reader.nextElementName()); Assert.assertTrue(reader.hasTextContent()); Assert.assertEquals("[{a:'b'}, {b:'c'}]", reader.nextTextContent()); reader.endElement(); Assert.assertFalse(reader.hasElement()); Assert.assertEquals(XmlReader.XmlToken.END_OF_DOCUMENT, reader.peek()); } finally { reader.close(); } }
@Test public void noAttributesButTextContent() throws IOException { String xml = "<foo>Value</foo>"; XmlReader reader = readerFrom(xml); try { Assert.assertTrue(reader.hasElement()); reader.beginElement(); Assert.assertEquals("foo", reader.nextElementName()); Assert.assertFalse(reader.hasAttribute()); Assert.assertTrue(reader.hasTextContent()); Assert.assertEquals("Value", reader.nextTextContent()); reader.endElement(); Assert.assertFalse(reader.hasElement()); Assert.assertEquals(XmlReader.XmlToken.END_OF_DOCUMENT, reader.peek()); } finally { reader.close(); } }
@Test public void xmlWithLowercaseDoctypes() throws IOException { String xml = "<!doctype rootelement SYSTEM \"file.dtd\"><root\nanAttribute=\"1\"\n attributeWithWhiteSpace=\"2\" \n \t\tattributeWithTabs=\"20.2\">\n<child>Contains\nmulitlines\n</child>\n</root>"; XmlReader reader = readerFrom(xml); reader.beginElement(); Assert.assertEquals("root", reader.nextElementName()); Assert.assertEquals("anAttribute", reader.nextAttributeName()); Assert.assertEquals(1, reader.nextAttributeValueAsInt()); Assert.assertEquals("attributeWithWhiteSpace", reader.nextAttributeName()); Assert.assertEquals("2", reader.nextAttributeValue()); Assert.assertEquals("attributeWithTabs", reader.nextAttributeName()); Assert.assertEquals(20.2, reader.nextAttributeValueAsDouble(), 0); Assert.assertTrue(reader.hasElement()); reader.beginElement(); Assert.assertEquals("child", reader.nextElementName()); Assert.assertEquals("Contains\nmulitlines\n", reader.nextTextContent()); reader.endElement(); reader.endElement(); Assert.assertFalse(reader.hasElement()); }