| 1 | module main |
| 2 | |
| 3 | import encoding.xml |
| 4 | |
| 5 | const sample_document = ' |
| 6 | <root> |
| 7 | <a attr="value1"> |
| 8 | <b id="middle-tag" attr="value2"> |
| 9 | <c attr="value3">Text1</c> |
| 10 | <d attr="value4">Text2</d> |
| 11 | <e attr="value5"> |
| 12 | <f id="innermost" attr="value6">Text3</f> |
| 13 | <g attr="value7">Text4</g> |
| 14 | <h attr="value8">Text5</h> |
| 15 | </e> |
| 16 | <i attr="value9">Text6</i> |
| 17 | </b> |
| 18 | <j attr="value10">Text7</j> |
| 19 | </a> |
| 20 | <k attr="value11">Text8</k> |
| 21 | <l attr="value12">Text9</l> |
| 22 | </root> |
| 23 | ' |
| 24 | |
| 25 | fn test_querying() ! { |
| 26 | doc := xml.XMLDocument.from_string(sample_document)! |
| 27 | |
| 28 | assert doc.root.name == 'root' |
| 29 | assert doc.root.children.len == 3 |
| 30 | |
| 31 | middle_tag := doc.get_element_by_id('middle-tag')? |
| 32 | assert middle_tag.name == 'b' |
| 33 | assert middle_tag.attributes['attr'] == 'value2' |
| 34 | assert middle_tag.children.len == 4 |
| 35 | |
| 36 | innermost := middle_tag.get_element_by_id('innermost')? |
| 37 | assert innermost.name == 'f' |
| 38 | assert innermost.attributes['attr'] == 'value6' |
| 39 | |
| 40 | for count in 1 .. 13 { |
| 41 | assert doc.get_elements_by_attribute('attr', 'value${count}').len == 1 |
| 42 | } |
| 43 | |
| 44 | i_tags := doc.get_elements_by_tag('i') |
| 45 | assert i_tags.len == 1 |
| 46 | assert i_tags[0].name == 'i' |
| 47 | assert i_tags[0].attributes['attr'] == 'value9' |
| 48 | assert i_tags[0].children.len == 1 |
| 49 | assert i_tags[0].children[0] as string == 'Text6' |
| 50 | } |
| 51 | |