(root, namespaces)
| 3773 | |
| 3774 | |
| 3775 | function writeString(root, namespaces) { |
| 3776 | var uriToPrefix = _.invert(namespaces); |
| 3777 | |
| 3778 | var nodeWriters = { |
| 3779 | element: writeElement, |
| 3780 | text: writeTextNode |
| 3781 | }; |
| 3782 | |
| 3783 | function writeNode(builder, node) { |
| 3784 | return nodeWriters[node.type](builder, node); |
| 3785 | } |
| 3786 | |
| 3787 | function writeElement(builder, element) { |
| 3788 | var elementBuilder = builder.element(mapElementName(element.name), element.attributes); |
| 3789 | element.children.forEach(function(child) { |
| 3790 | writeNode(elementBuilder, child); |
| 3791 | }); |
| 3792 | } |
| 3793 | |
| 3794 | function mapElementName(name) { |
| 3795 | var longFormMatch = /^\{(.*)\}(.*)$/.exec(name); |
| 3796 | if (longFormMatch) { |
| 3797 | var prefix = uriToPrefix[longFormMatch[1]]; |
| 3798 | return prefix + (prefix === "" ? "" : ":") + longFormMatch[2]; |
| 3799 | } else { |
| 3800 | return name; |
| 3801 | } |
| 3802 | } |
| 3803 | |
| 3804 | function writeDocument(root) { |
| 3805 | var builder = xmlbuilder |
| 3806 | .create(mapElementName(root.name), { |
| 3807 | version: '1.0', |
| 3808 | encoding: 'UTF-8', |
| 3809 | standalone: true |
| 3810 | }); |
| 3811 | |
| 3812 | _.forEach(namespaces, function(uri, prefix) { |
| 3813 | var key = "xmlns" + (prefix === "" ? "" : ":" + prefix); |
| 3814 | builder.attribute(key, uri); |
| 3815 | }); |
| 3816 | |
| 3817 | root.children.forEach(function(child) { |
| 3818 | writeNode(builder, child); |
| 3819 | }); |
| 3820 | return builder.end(); |
| 3821 | } |
| 3822 | |
| 3823 | return writeDocument(root); |
| 3824 | } |
| 3825 | |
| 3826 | function writeTextNode(builder, node) { |
| 3827 | builder.text(node.value); |
nothing calls this directly
no test coverage detected