XML/DOM serialization: Difference between revisions
< XML
Content added Content deleted
m (→{{header|Perl}}: Added syntax highlight.) |
(DOM XML Serialization example for Forth) |
||
Line 41: | Line 41: | ||
(On the use of <code><unsafe></code>: The class has not yet been reviewed for E safety, so <code><import:...makeDocumentBuilderFactory></code> is not yet allowed. The review would probably be straightforward.) |
(On the use of <code><unsafe></code>: The class has not yet been reviewed for E safety, so <code><import:...makeDocumentBuilderFactory></code> is not yet allowed. The review would probably be straightforward.) |
||
=={{header|Forth}}== |
|||
{{libheader|Forth Foundation Library}} |
|||
include ffl/dom.fs |
|||
\ Create a dom variable 'doc' in the dictionary |
|||
dom-create doc |
|||
\ Add the document root with its version attribute |
|||
dom.document doc dom-append-node |
|||
s" version" s" 1.0" dom.attribute doc dom-append-node |
|||
\ Add root and element |
|||
doc dom-parent 2drop |
|||
s" root" dom.element doc dom-append-node |
|||
s" element" dom.element doc dom-append-node |
|||
\ Add the text |
|||
s" Some text here" dom.text doc dom-append-node |
|||
\ Convert the document to a string and print |
|||
doc dom-write-string [IF] |
|||
type cr |
|||
[THEN] |
|||
=={{header|Groovy}}== |
=={{header|Groovy}}== |
Revision as of 18:30, 20 January 2009
XML/DOM serialization
You are encouraged to solve this task according to the task description, using any language you may know.
You are encouraged to solve this task according to the task description, using any language you may know.
Create a simple DOM and having it serialize to:
<?xml version="1.0" ?> <root> <element> Some text here </element> </root>
D
module xmltest ; import std.stdio ; import std.xml ; void main() { auto doc = new Document("root") ; //doc.prolog = q"/<?xml version="1.0"?>/" ; // default doc ~= new Element("element", "Some text here") ; writefln(doc) ; // output: <?xml version="1.0"?><root><element>Some text here</element></root> }
E
This makes use of XML libraries provided with Java.
def document := <unsafe:javax.xml.parsers.makeDocumentBuilderFactory> \ .newInstance() \ .newDocumentBuilder() \ .getDOMImplementation() \ .createDocument(null, "root", null) def root := document.getDocumentElement() root.appendChild( def element := document.createElement("element")) element.appendChild( document.createTextNode("Some text here")) println(document.saveXML(root))
(On the use of <unsafe>
: The class has not yet been reviewed for E safety, so <import:...makeDocumentBuilderFactory>
is not yet allowed. The review would probably be straightforward.)
Forth
include ffl/dom.fs \ Create a dom variable 'doc' in the dictionary dom-create doc \ Add the document root with its version attribute dom.document doc dom-append-node s" version" s" 1.0" dom.attribute doc dom-append-node \ Add root and element doc dom-parent 2drop s" root" dom.element doc dom-append-node s" element" dom.element doc dom-append-node \ Add the text s" Some text here" dom.text doc dom-append-node \ Convert the document to a string and print doc dom-write-string [IF] type cr [THEN]
Groovy
import groovy.xml.MarkupBuilder def writer = new StringWriter() << '<?xml version="1.0" ?>\n' def xml = new MarkupBuilder(writer) xml.root() { element('Some text here' ) } println writer
JavaScript
DOM
var doc = document.implementation.createDocument( null, 'root', null ); var root = doc.documentElement; var element = doc.createElement( 'element' ); root.appendChild( element ); element.appendChild( document.createTextNode('Some text here') ); var xmlString = new XMLSerializer().serializeToString( doc );
E4X
var xml = <root> <element>Some text here</element> </root>; var xmlString = xml.toXMLString();
E4X — with processing instruction
XML.ignoreProcessingInstructions = false; var xml = <?xml version="1.0"?> <root> <element>Some text here</element> </root>; var xmlString = xml.toXMLString();
Perl
<perl> use XML::DOM::BagOfTricks qw(createDocument createTextElement); my ($doc, $root) = createDocument('root'); $root->appendChild( createTextElement($doc, 'element', 'Some text here') ); print $doc->toString; </perl> Output: <root><element>Some text here</element></root>
<perl> use XML::LibXML; $xml = XML::LibXML::Document->new('1.0'); $node = $xml->createElement('root'); $xml->setDocumentElement($node); $node2 = $xml->createElement('element'); $text = $xml->createTextNode('Some text here'); $node2->addChild($text); $node->appendWellBalancedChunk('text'); $node->addChild($node2); print $xml->toString; </perl> Output: <?xml version="1.0"?> <root>text<element>Some text here</element></root>
PHP
<?php $dom = new DOMDocument();//the constructor also takes the version and char-encoding as it's two respective parameters $dom->formatOutput = true;//format the outputted xml $root = $dom->createElement('root'); $element = $dom->createElement('element'); $element->appendChild($dom->createTextNode('Some text here')); $root->appendChild($element); $dom->appendChild($root); $xmlstring = $dom->saveXML();
Python
from xml.dom.minidom import getDOMImplementation dom = getDOMImplementation() document = dom.createDocument(None, "root", None) topElement = document.documentElement firstElement = document.createElement("element") topElement.appendChild(firstElement) textNode = document.createTextNode("Some text here") firstElement.appendChild(textNode) xmlString = document.toprettyxml(" " * 4)
from xml.etree import ElementTree as et root = et.Element("root") et.SubElement(root, "element").text = "Some text here" xmlString = et.tostring(root)
Ruby
require("rexml/document") include REXML (xml = Document.new) << XMLDecl.new root=xml.add_element('root') element=root.add_element('element') element.add_text('Some text here') puts xml.to_s(0)
XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" /> <xsl:template match="/"> <!-- replace the root of the incoming document with our own model --> <xsl:element name="root"> <xsl:element name="element"> <xsl:text>Some text here</xsl:text> </xsl:element> </xsl:element> </xsl:template> </xsl:stylesheet>