]> Repositorios git - scryer-prolog.git/commitdiff
library(sgml): Correctly parse XML leaf nodes that are not text nodes.
authorMarkus Triska <[email protected]>
Tue, 11 Aug 2020 19:00:56 +0000 (21:00 +0200)
committerMarkus Triska <[email protected]>
Tue, 11 Aug 2020 19:20:33 +0000 (21:20 +0200)
Example:

    ?- load_xml("<schemaRef type=\"simple\"/>", Node, []).
       Node = [element(schemaRef,[type="simple"],[])].

This is necessary for example to parse XBRL files. See #665.

src/machine/system_calls.rs

index 2d890877c577d11a01a1890f80cb73841aecac2f..d2779d1ae544a0b070307d31b53344e32a262082 100644 (file)
@@ -5877,7 +5877,10 @@ impl MachineState {
         indices: &mut IndexStore,
         node: roxmltree::Node,
     ) -> Addr {
-        if node.has_children() {
+        if node.is_text() {
+            let string = String::from(node.text().unwrap());
+            self.heap.put_complete_string(&string)
+        } else {
             let mut avec = Vec::new();
             for attr in node.attributes() {
                 let chars = clause_name!(String::from(attr.name()), indices.atom_tbl);
@@ -5914,9 +5917,6 @@ impl MachineState {
             self.heap.push(HeapCellValue::Addr(children));
 
             result
-        } else {
-            let string = String::from(node.text().unwrap());
-            self.heap.put_complete_string(&string)
         }
     }