Jump to content

XML/Input: Difference between revisions

m
syntax highlighting fixup automation
(→‎{{header|Wren}}: Added a version using an XML library.)
m (syntax highlighting fixup automation)
Line 3:
Given the following XML fragment, extract the list of ''student names'' using whatever means desired. If the only viable method is to use XPath, refer the reader to the task [[XML and XPath]].
 
<langsyntaxhighlight lang="xml"><Students>
<Student Name="April" Gender="F" DateOfBirth="1989-01-02" />
<Student Name="Bob" Gender="M" DateOfBirth="1990-03-04" />
Line 11:
</Student>
<Student DateOfBirth="1993-09-10" Gender="F" Name="&#x00C9;mily" />
</Students></langsyntaxhighlight>
 
Expected Output
Line 22:
 
=={{header|8th}}==
<langsyntaxhighlight lang="forth">
\ Load the XML text into the var 'x':
Line 46:
\ Iterate over the XML document in the var 'x'
x @ ' .xml xml:each bye
</syntaxhighlight>
</lang>
{{out}}
April<br>
Line 56:
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<syntaxhighlight lang="aarch64 assembly">
<lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program inputXml64.s */
Line 275:
.include "../includeARM64.inc"
 
</syntaxhighlight>
</lang>
{{Output}}
<pre>
Line 287:
 
=={{header|ActionScript}}==
<langsyntaxhighlight lang="actionscript">package
{
import flash.display.Sprite;
Line 308:
}
}
}</langsyntaxhighlight>
 
=={{header|Ada}}==
Line 316:
 
extract_students.adb:
<langsyntaxhighlight Adalang="ada">with Sax.Readers;
with Input_Sources.Strings;
with Unicode.CES.Utf8;
Line 338:
My_Reader.Parse (Reader, Input);
Input_Sources.Strings.Close (Input);
end Extract_Students;</langsyntaxhighlight>
 
my_reader.ads:
<langsyntaxhighlight Adalang="ada">with Sax.Attributes;
with Sax.Readers;
with Unicode.CES;
Line 352:
Qname : Unicode.CES.Byte_Sequence := "";
Atts : Sax.Attributes.Attributes'Class);
end My_Reader;</langsyntaxhighlight>
 
my_reader.adb:
<langsyntaxhighlight Adalang="ada">with Ada.Text_IO;
package body My_Reader is
procedure Start_Element
Line 368:
end if;
end Start_Element;
end My_Reader;</langsyntaxhighlight>
 
Output:
Line 378:
 
===Alternative using a DOM document===
<langsyntaxhighlight Adalang="ada">with Ada.Text_IO;
with Sax.Readers;
with Input_Sources.Strings;
Line 418:
end loop;
DOM.Readers.Free (Reader);
end Extract_Students;</langsyntaxhighlight>
 
output is the same.
Line 428:
main.adb:
 
<langsyntaxhighlight Adalang="ada">with League.Application;
with XML.SAX.Input_Sources.Streams.Files;
with XML.SAX.Simple_Readers;
Line 443:
Reader.Set_Content_Handler (Handler'Unchecked_Access);
Reader.Parse (Input'Unchecked_Access);
end Main;</langsyntaxhighlight>
 
handlers.ads:
 
<langsyntaxhighlight Adalang="ada">with League.Strings;
with XML.SAX.Attributes;
with XML.SAX.Content_Handlers;
Line 467:
(Self : Handler) return League.Strings.Universal_String;
 
end Handlers;</langsyntaxhighlight>
 
handlers.adb:
 
<langsyntaxhighlight Adalang="ada">with Ada.Wide_Wide_Text_IO;
 
package body Handlers is
Line 509:
end Start_Element;
 
end Handlers;</langsyntaxhighlight>
 
=={{header|Aikido}}==
Put the XML in the file called t.xml
<langsyntaxhighlight lang="aikido">
import xml
 
Line 529:
}
 
</syntaxhighlight>
</lang>
The output is (Aikido doesn't support unicode rendering):
April
Line 539:
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
<syntaxhighlight lang="arm assembly">
<lang ARM Assembly>
/* ARM assembly Raspberry PI */
/* program inputXml.s */
Line 821:
pop {r1-r4}
bx lr
</syntaxhighlight>
</lang>
{{output}}
<pre>
Line 834:
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">data: {
<Students>
<Student Name="April" Gender="F" DateOfBirth="1989-01-02" />
Line 847:
 
students: read.xml data
print join.with:"\n" map students 'student -> student\Name</langsyntaxhighlight>
 
{{out}}
Line 859:
=={{header|AutoHotkey}}==
simply using regular expressions
<langsyntaxhighlight AutoHotkeylang="autohotkey">students =
(
<Students>
Line 878:
names .= name1 . "`n"
 
msgbox % names</langsyntaxhighlight>
 
=={{header|AWK}}==
The following code extracts the value of the property "Name" from every Student tag. It does not handle the <tt>&amp;#CODE;</tt>; this can be left to others: a way to cope with it fastly, is to output a very simple HTML structure, so that the interpretation is left to an HTML reader/browser.
 
<langsyntaxhighlight lang="awk">function parse_buf()
{
if ( match(buffer, /<Student[ \t]+[^>]*Name[ \t]*=[ \t]*"([^"]*)"/, mt) != 0 ) {
Line 938:
print k
}
}</langsyntaxhighlight>
Using [http://awk.info/?getxml getXML.awk] written by Jan Weber, one could do this:
 
{{works with|gawk}} or {{works with|nawk}}
<langsyntaxhighlight lang="awk">awk -f getXML.awk sample.xml | awk '
$1 == "TAG" {tag = $2}
tag == "Student" && /Name=/ {print substr($0, index($0, "=") + 1)}
'</langsyntaxhighlight>
Using [http://home.vrweb.de/~juergen.kahrs/gawk/XML/xmlgawk.html#Steve-Coile_0027s-xmlparse_002eawk-script xmlparser.awk] by Steve Coile, one can do this:
 
{{works with|gawk}}
<langsyntaxhighlight lang="awk">gawk -f xmlparser.awk sample.xml | awk '
$1 == "begin" {tag = $2}
$1 == "attrib" {attrib = $2}
$1 == "value" && tag == "STUDENT" && attrib == "name" {print $2}
'</langsyntaxhighlight>
 
Both of these produce this output
Line 975:
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<langsyntaxhighlight lang="bbcbasic"> INSTALL @lib$+"XMLLIB"
xmlfile$ = "C:\students.xml"
PROC_initXML(xmlobj{}, xmlfile$)
Line 994:
UNTIL FN_getLevel(xmlobj{}) < level%
PROC_exitXML(xmlobj{})</langsyntaxhighlight>
Output:
<pre>
Line 1,008:
The read datastructure is a flat list of tags and text fragments. For proper nesting of elements extra code would have to be written, but in this simple task that is not necessary. On the downside, the pattern must both handle empty tags (the <code>(? (Name.?name) ?,</code> pattern) and open tags (the <code>? (Name.?name) ?</code> pattern).
Reading input from a file:
<langsyntaxhighlight lang="bracmat">( :?names
& ( get$("students.xml",X,ML)
: ?
Line 1,021:
| !names
)
)</langsyntaxhighlight>
 
Alternative solution, reading input from memory:
<langsyntaxhighlight lang="bracmat">( :?names
& ( get
$ ( "<Students>
Line 1,050:
| !names
)
)</langsyntaxhighlight>
Output:
<pre>April Bob Chad Dave Émily</pre>
Line 1,059:
{{uses from|Library|libxml|component1=xmlDoc|component2=xmlNode|component3=xmlReadMemory|component4=xmlDocGetRootElement|component5=xmlFreeDoc|component6=xmlCleanupParser|component7=xmlNode|component8=XML_ELEMENT_NODE|component9=xmlAttr|component10=xmlHasProp}}
{{uses from|Library|C Runtime|component1=printf}}
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Line 1,106:
xmlCleanupParser();
return 0;
}</langsyntaxhighlight>
 
=={{header|C sharp}}==
<langsyntaxhighlight lang="csharp">
class Program
{
Line 1,125:
}
}
</syntaxhighlight>
</lang>
 
=={{header|C++}}==
Line 1,132:
{{uses from|Library|Qt|component1=QDomDocument|component2=QObject|component3=QDomElement}}
 
<langsyntaxhighlight lang="cpp">/*
Using the Qt library's XML parser.
*/
Line 1,161:
}
return 0;
}</langsyntaxhighlight>
 
=={{header|Caché ObjectScript}}==
 
<langsyntaxhighlight lang="cos">Class XML.Students [ Abstract ]
{
 
Line 1,200:
}
 
}</langsyntaxhighlight>
{{out|Examples}}
<pre>
Line 1,215:
{{uses from|Library|clojure.xml|component1=parse}}
This version uses the standard Clojure function ''xml-seq'
<langsyntaxhighlight lang="lisp">
(import '(java.io ByteArrayInputStream))
(use 'clojure.xml) ; defines 'parse
Line 1,230:
 
(def students (parse (-> xml-text .getBytes ByteArrayInputStream.)))
</syntaxhighlight>
</lang>
 
The parse produces a data structure where each element is represented as a map with '':tag'', '':attrs'', and '':content'' keys.
Line 1,236:
''xml-seq'' produces a sequence of such nodes by walking the resulting tree.
 
<langsyntaxhighlight lang="lisp">
(doseq [{:keys [tag attrs]} (xml-seq students)]
(if (= :Student tag)
(println (:Name attrs))))
</syntaxhighlight>
</lang>
 
=={{header|Common Lisp}}==
Line 1,246:
{{libheader|Closure XML}}
 
<langsyntaxhighlight lang="lisp">(defparameter *xml-blob*
"<Students>
<Student Name=\"April\" Gender=\"F\" DateOfBirth=\"1989-01-02\" />
Line 1,262:
(dom:do-node-list (child (dom:child-nodes students) (nreverse student-names))
(when (dom:element-p child)
(push (dom:get-attribute child "Name") student-names))))</langsyntaxhighlight>
 
produces<langsyntaxhighlight lang="lisp">("April" "Bob" "Chad" "Dave" "Émily")</langsyntaxhighlight>
 
=={{header|D}}==
{{libheader|KXML}}
<langsyntaxhighlight lang="d">import kxml.xml;
char[]xmlinput =
"<Students>
Line 1,291:
break;
}
}</langsyntaxhighlight>
 
=={{header|Delphi}}==
<syntaxhighlight lang="delphi">
<lang Delphi>
//You need to use these units
uses
Line 1,341:
Showmessage(GetStudents(XMLInput));
end;
</syntaxhighlight>
</lang>
 
=={{header|Erlang}}==
<syntaxhighlight lang="erlang">
<lang Erlang>
-module( xml_input ).
 
Line 1,367:
<Student DateOfBirth=\"1993-09-10\" Gender=\"F\" Name=\"&#x00C9;mily\" />
</Students>".
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,379:
 
=={{header|F_Sharp|F#}}==
<langsyntaxhighlight lang="fsharp">open System.IO
open System.Xml
open System.Xml.Linq
Line 1,404:
let names = students.Attributes <| xn "Name"
Seq.iter ((fun (a : XAttribute) -> a.Value) >> printfn "%s") names
0</langsyntaxhighlight>
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">USING: io multiline sequences xml xml.data xml.traversal ;
 
: print-student-names ( string -- )
Line 1,420:
</Student>
<Student DateOfBirth="1993-09-10" Gender="F" Name="&#x00C9;mily" />
</Students>]] print-student-names</langsyntaxhighlight>
 
=={{header|Fantom}}==
<langsyntaxhighlight lang="fantom">
using xml
 
Line 1,442:
}
}
</syntaxhighlight>
</lang>
 
=={{header|Forth}}==
Line 1,448:
{{libheader|Forth Foundation Library}}
 
<langsyntaxhighlight lang="forth">include ffl/est.fs
include ffl/str.fs
include ffl/xis.fs
Line 1,495:
;
 
xmlparse</langsyntaxhighlight>
 
=={{header|Fortran}}==
Line 1,503:
Uses [https://github.com/DLR-SC/tixi tixi library] (+ LibXML, curl as dependencies)
 
<langsyntaxhighlight lang="fortran">
program tixi_rosetta
use tixi
Line 1,537:
 
end program tixi_rosetta
</syntaxhighlight>
</lang>
 
Compile
Line 1,557:
Uses [https://github.com/andreww/fox FoX]
 
<langsyntaxhighlight lang="fortran">
program fox_rosetta
use FoX_dom
Line 1,587:
call destroy(doc)
end program fox_rosetta
</syntaxhighlight>
</lang>
 
Output
Line 1,601:
=={{header|Go}}==
Go's <tt>xml.Unmarshal</tt> uses reflection to fill in data-structures recursively.
<langsyntaxhighlight lang="go">package main
 
import (
Line 1,650:
fmt.Println(s.Name)
}
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,661:
 
=={{header|Groovy}}==
<langsyntaxhighlight lang="groovy">def input = """<Students>
<Student Name="April" Gender="F" DateOfBirth="1989-01-02" />
<Student Name="Bob" Gender="M" DateOfBirth="1990-03-04" />
Line 1,672:
 
def students = new XmlParser().parseText(input)
students.each { println it.'@Name' }</langsyntaxhighlight>
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">import Data.Maybe
import Text.XML.Light
 
Line 1,689:
xmlRead elm name = mapM_ putStrLn
. concatMap (map (fromJust.findAttr (unqual name)).filterElementsName (== unqual elm))
. onlyElems. parseXML</langsyntaxhighlight>
Show names:
<langsyntaxhighlight lang="haskell">*Main> xmlRead "Student" "Name" students
April
Bob
Chad
Dave
Émily</langsyntaxhighlight>
 
=={{header|HicEst}}==
<langsyntaxhighlight HicEstlang="hicest">CHARACTER in*1000, out*100
 
READ(ClipBoard) in
EDIT(Text=in, SPR='"', Right='<Student', Right='Name=', Word=1, WordEnd, APpendTo=out, DO)</langsyntaxhighlight>
<pre>out is returned as:
April Bob Chad Dave &#x00C9;mily
Line 1,710:
J's system includes several XML processing libraries. This task is probably best addressed using XPath (this is the type of problem XPath was designed to solve), but the task description implicitly discourages that method. So we can use the SAX library instead:
 
<langsyntaxhighlight lang="j">load'xml/sax'
saxclass 'Students'
Line 1,716:
cocurrent'base'
process_Students_ XML</langsyntaxhighlight>
April
Bob
Line 1,724:
 
and the definition of the variable <code>XML</code>:
<langsyntaxhighlight lang="j">XML=: noun define
<Students>
<Student Name="April" Gender="F" DateOfBirth="1989-01-02" />
Line 1,734:
<Student DateOfBirth="1993-09-10" Gender="F" Name="&#x00C9;mily" />
</Students>
)</langsyntaxhighlight>
 
=={{header|Java}}==
{{uses from|Library|java.io|component1=IOException|component2=StringReader}}
{{uses from|Library|org.xml.sax|component1=Attributes|component2=InputSource|component3=SAXException|component4=XMLReader|component5=helpers.DefaultHandler|component6=helpers.XMLReaderFactory}}
<langsyntaxhighlight lang="java">import java.io.IOException;
import java.io.StringReader;
import org.xml.sax.Attributes;
Line 1,789:
}
}
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
Line 1,795:
=== Browser version ===
This version tested against Chrome 37, Firefox 32, and IE 11:
<syntaxhighlight lang="javascript">
<lang JavaScript>
var xmlstr = '<Students>' +
'<Student Name="April" Gender="F" DateOfBirth="1989-01-02" />' +
Line 1,822:
console.log(students[e].attributes.Name.value);
}
</syntaxhighlight>
</lang>
{{works with|Mozilla Firefox|32}}
 
=== Node.js version ===
<syntaxhighlight lang="javascript">
<lang JavaScript>
var parseString = require('xml2js').parseString;
var xmlstr = '<Students>' +
Line 1,845:
}
});
</syntaxhighlight>
</lang>
 
=== E4X version ===
Alternatively, use the E4X featureset (currently only in Firefox):
<syntaxhighlight lang="javascript">
<lang JavaScript>
var xmlstr = '<Students>' +
'<Student Name="April" Gender="F" DateOfBirth="1989-01-02" />' +
Line 1,870:
 
alert(output);
</syntaxhighlight>
</lang>
 
=={{header|Julia}}==
{{works with|Julia|0.6}}
 
<langsyntaxhighlight lang="julia">using LightXML
 
let docstr = """<Students>
Line 1,892:
println(attribute(elem, "Name"))
end
end</langsyntaxhighlight>
 
{{out}}
Line 1,903:
=={{header|Kotlin}}==
As this is just a small XML document, the DOM parser has been used rather than the SAX parser:
<langsyntaxhighlight lang="scala">// version 1.1.3
 
import javax.xml.parsers.DocumentBuilderFactory
Line 1,938:
}
}
}</langsyntaxhighlight>
 
{{out}}
Line 1,951:
=={{header|Lasso}}==
Task calls for a result not using Xpaths. Thus two examples shown. First uses Xpath, second uses regular expression.
<langsyntaxhighlight Lassolang="lasso">// makes extracting attribute values easier
define xml_attrmap(in::xml_namedNodeMap_attr) => {
local(out = map)
Line 1,981:
}
#names -> join('<br />')
</syntaxhighlight>
</lang>
<langsyntaxhighlight Lassolang="lasso">// not using XML or Xpath
'<hr />'
local(
Line 1,992:
#names -> insert(#regexp -> matchstring(1))
}
#names -> join('<br />')</langsyntaxhighlight>
Output:
<pre>April
Line 2,007:
 
=={{header|Lingo}}==
<langsyntaxhighlight lang="lingo">q = QUOTE
r = RETURN
xml = "<Students>"&r&\
Line 2,024:
repeat with c in res.child
put c.attributes.name
end repeat</langsyntaxhighlight>
 
{{out}}
Line 2,037:
=={{header|LiveCode}}==
Put the XML text in a text field called FieldXML for this exercise.
<langsyntaxhighlight LiveCodelang="livecode">put revXMLCreateTree(fld "FieldXML",true,true,false) into currTree
put revXMLAttributeValues(currTree,"Students","Student","Name",return,-1)</langsyntaxhighlight>
 
=={{header|Lua}}==
Requires LuaExpat
<langsyntaxhighlight lang="lua">
require 'lxp'
data = [[<Students>
Line 2,062:
p:parse(data)
p:close()
</syntaxhighlight>
</lang>
Output:
<pre>
Line 2,075:
Declare Object Nothing is optional. COM objects deleted when module exit by default.
 
<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Module CheckIt {
Const Enumerator=-4&
Line 2,102:
}
CheckIt
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,113:
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">Column[Cases[Import["test.xml","XML"],Rule["Name", n_ ] -> n,Infinity]]</langsyntaxhighlight>
{{out}}
<pre>April
Line 2,122:
 
=={{header|MATLAB}}==
<langsyntaxhighlight Matlablang="matlab">RootXML = com.mathworks.xml.XMLUtils.createDocument('Students');
docRootNode = RootXML.getDocumentElement;
thisElement = RootXML.createElement('Student');
Line 2,164:
for I=0:1:RootXML.getElementsByTagName('Student').getLength-1
disp(RootXML.getElementsByTagName('Student').item(I).getAttributes.item(tag).getValue)
end</langsyntaxhighlight>
 
{{out}}
Line 2,176:
 
=={{header|Neko}}==
<syntaxhighlight lang="actionscript">/**
<lang ActionScript>/**
XML/Input in Neko
Tectonics:
Line 2,205:
parse_xml(xmlString, events);
 
/* Entities are not converted, use external recode program for that */</langsyntaxhighlight>
 
{{out}}
<pre>
prompt$ nekoc xml-input.neko
prompt$ neko xml-input.n</pre><langsyntaxhighlight lang="xml">April
Bob
Chad
Dave
&#x00C9;mily</langsyntaxhighlight>
<pre>
prompt$ neko xml-input.n | recode html
Line 2,224:
 
=={{header|newLISP}}==
<langsyntaxhighlight lang="newlisp">
(set 'xml-input "<Students>
<Student Name=\"April\" Gender=\"F\" DateOfBirth=\"1989-01-02\" />
Line 2,240:
(if (= (length x) 6)
(println (last (sexp (chop x))))))
</syntaxhighlight>
</lang>
 
Output:
Line 2,251:
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">import xmlparser, xmltree, streams
 
let doc = newStringStream """<Students>
Line 2,264:
 
for i in doc.parseXml.findAll "Student":
echo i.attr "Name"</langsyntaxhighlight>
Output:
<pre>April
Line 2,273:
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">
use XML;
 
Line 2,301:
}
}
</syntaxhighlight>
</lang>
 
=={{header|OCaml}}==
from the toplevel using the library [http://tech.motion-twin.com/xmllight.html xml-light]:
<langsyntaxhighlight lang="ocaml"># #directory "+xml-light" (* or maybe "+site-lib/xml-light" *) ;;
# #load "xml-light.cma" ;;
 
Line 2,329:
Dave
&#x00C9;mily
- : unit = ()</langsyntaxhighlight>
 
Another solution using the library [http://erratique.ch/software/xmlm xmlm]:
<langsyntaxhighlight lang="ocaml">#directory "+xmlm"
#load "xmlm.cmo"
open Xmlm
Line 2,356:
List.iter (function ((_, "Name"), name) -> print_endline name | _ -> ()) attrs
| _ -> ()
done</langsyntaxhighlight>
 
using the [http://www.xs4all.nl/~mmzeeman/ocaml/ ocaml expat wrapper]:
 
<langsyntaxhighlight lang="ocaml">open Expat
 
let xml_str = "
Line 2,381:
);
parse p xml_str;
final p;</langsyntaxhighlight>
 
=={{header|OpenEdge ABL/Progress 4GL}}==
 
<syntaxhighlight lang="openedgeabl">
<lang OpenEdgeABL>
/** ==== Definitions ===== **/
DEFINE VARIABLE chXMLString AS LONGCHAR NO-UNDO.
Line 2,415:
END.
 
</syntaxhighlight>
</lang>
 
=={{header|OpenEdge/Progress}}==
The following example uses the X-DOCUMENT DOM parser. For larger documents the SAX parser is recommended.
 
<langsyntaxhighlight lang="progress">
DEF VAR lcc AS LONGCHAR.
DEF VAR hxdoc AS HANDLE.
Line 2,456:
DELETE OBJECT hxdoc.
 
MESSAGE cstudents VIEW-AS ALERT-BOX.</langsyntaxhighlight>
 
'''Output:'''
Line 2,474:
 
=={{header|Oz}}==
<langsyntaxhighlight lang="oz">declare
[XMLParser] = {Module.link ['x-oz://system/xml/Parser.ozf']}
Parser = {New XMLParser.parser init}
Line 2,505:
StudentNames = {Map Students GetStudentName}
in
{ForAll StudentNames System.showInfo}</langsyntaxhighlight>
 
=={{header|Perl}}==
{{libheader|XML::Simple}}
<langsyntaxhighlight lang="perl">use utf8;
use XML::Simple;
 
Line 2,522:
</Students>');
 
print join( "\n", map { $_->{'Name'} } @{$ref->{'Student'}});</langsyntaxhighlight>
{{out}}
<pre>April
Line 2,531:
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">/</span><span style="color: #000000;">xml</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
Line 2,561:
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #000000;">traverse</span><span style="color: #0000FF;">(</span><span style="color: #000000;">x</span><span style="color: #0000FF;">[</span><span style="color: #000000;">XML_CONTENTS</span><span style="color: #0000FF;">])</span>
<!--</langsyntaxhighlight>-->
{{out}}
Note the last line (&#x00C9;mily) looks significantly better on this page, and on Linux or when run in a browser, than it (usually) does on a windows console!<br>
Line 2,575:
 
=={{header|PHP}}==
<langsyntaxhighlight PHPlang="php"><?php
$data = '<Students>
<Student Name="April" Gender="F" DateOfBirth="1989-01-02" />
Line 2,590:
if ( XMLREADER::ELEMENT == $xml->nodeType && $xml->localName == 'Student' )
echo $xml->getAttribute('Name') . "\n";
?></langsyntaxhighlight>
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(load "@lib/xm.l")
 
(mapcar
'((L) (attr L 'Name))
(body (in "file.xml" (xml))) )</langsyntaxhighlight>
Output:
<pre>-> ("April" "Bob" "Chad" "Dave" "Émily")</pre>
 
=={{header|Pike}}==
<syntaxhighlight lang="pike">
<lang Pike>
string in = "<Students>\n"
" <Student Name=\"April\" Gender=\"F\" DateOfBirth=\"1989-01-02\" />\n"
Line 2,621:
collect += ({ node->get_attributes()->Name });
});
write("%{%s\n%}", collect);</langsyntaxhighlight>
 
Output:
Line 2,631:
 
=={{header|PowerShell}}==
<syntaxhighlight lang="powershell">
<lang Powershell>
[xml]$xml = @'
<Students>
Line 2,648:
 
 
</syntaxhighlight>
</lang>
 
=={{header|PureBasic}}==
Uses a PureBasic XML library (which is linked automatically) that is based on the library [http://expat.sourceforge.net/ expat XML parser] licensed under the MIT license.
<langsyntaxhighlight PureBasiclang="purebasic">Define studentNames.String, src$
 
src$ = "<Students>"
Line 2,701:
MessageRequester("Student Names", studentNames\s)
FreeXML(0)
EndIf </langsyntaxhighlight>
Sample output:
<pre>
Line 2,712:
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">import xml.dom.minidom
 
doc = """<Students>
Line 2,727:
 
for i in doc.getElementsByTagName("Student"):
print i.getAttribute("Name")</langsyntaxhighlight>
 
=={{header|R}}==
{{libheader|XML}}
<langsyntaxhighlight Rlang="r">library(XML)
#Read in XML string
str <- readLines(tc <- textConnection('<Students>
Line 2,743:
</Students>'))
close(tc)
str</langsyntaxhighlight>
[1] "<Students>"
[2] " <Student Name=\"April\" Gender=\"F\" DateOfBirth=\"1989-01-02\" />"
Line 2,753:
[8] " <Student DateOfBirth=\"1993-09-10\" Gender=\"F\" Name=\"&#x00C9;mily\" />"
[9] "</Students>"
<langsyntaxhighlight Rlang="r">#Convert to an XML tree
xmltree <- xmlTreeParse(str)
 
Line 2,770:
#Change the encoding so that Emily displays correctly
Encoding(studentsnames) <- "UTF-8"
studentsnames</langsyntaxhighlight>
[1] "April" "Bob" "Chad" "Dave" "Émily"i
 
=={{header|Racket}}==
 
<langsyntaxhighlight lang="racket">
#lang racket
(require xml xml/path)
Line 2,799:
(se-path*/list '(Student #:Name) students)
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
Line 2,806:
 
{{libheader|XML}}
<syntaxhighlight lang="raku" perl6line>use XML;
 
my $xml = from-xml '<Students>
Line 2,818:
</Students>';
 
say .<Name> for $xml.nodes.grep(/Student/)</langsyntaxhighlight>
 
=={{header|Rascal}}==
<langsyntaxhighlight lang="rascal">import lang::xml::DOM;
 
public void getNames(loc a){
Line 2,828:
case element(_,"Student",[_*,attribute(_,"Name", x),_*]): println(x);
};
}</langsyntaxhighlight>
Output:
<langsyntaxhighlight lang="rascal">rascal>getNames(|file:///Users/.../Desktop/xmlinput.xml|)
April
Bob
Line 2,836:
Dave
Émily
ok</langsyntaxhighlight>
 
=={{header|REBOL}}==
<langsyntaxhighlight REBOLlang="rebol">REBOL [
Title: "XML Reading"
URL: http://rosettacode.org/wiki/XML_Reading
Line 2,873:
print select student/2 "Name"
]
]</langsyntaxhighlight>
 
Output:
Line 2,885:
=={{header|REXX}}==
===version 1===
<langsyntaxhighlight lang="rexx">/*REXX program extracts student names from an XML string(s). */
g.=
g.1 = '<Students> '
Line 2,901:
parse var g.j 'Name="' studname '"'
if studname\=='' then say studname
end /*j*/ /*stick a fork in it, we're all done. */</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the default (internal) input:}}
<pre>
Line 2,914:
===version 2===
This REXX version handles more HTML tags for output.
<langsyntaxhighlight lang="rexx">/*REXX program extracts student names from an XML string(s). */
g.=
g.1 = '<Students> '
Line 2,998:
$=XML_('£',"pound") ; $=XML_('╦',"boxHD") ; $=XML_('²',"sup2") ; $=XML_('é','#x00e9')
$=XML_('¥',"yen") ; $=XML_('╠',"boxVR") ; $=XML_('■',"square ") ; $=XML_('â',"acirc")
return $</langsyntaxhighlight>
Some older REXXes don't have a &nbsp; '''changestr''' &nbsp; BIF, &nbsp; so one is included here &nbsp; ──► &nbsp; [[CHANGESTR.REX]].
 
Line 3,013:
=={{header|Ruby}}==
{{libheader|REXML}}
<langsyntaxhighlight lang="ruby">require 'rexml/document'
include REXML
 
Line 3,026:
 
# using xpath
doc.each_element("*/Student") {|node| puts node.attributes["Name"]}</langsyntaxhighlight>
 
=={{header|Run BASIC}}==
<langsyntaxhighlight lang="runbasic">' ------------------------------------------------------------------------
'XMLPARSER methods
 
Line 3,072:
print count;" ";#spy value$();" ->";#spy ATTRIBVALUE$(1)
next count</langsyntaxhighlight>
 
=={{header|Rust}}==
Line 3,079:
This implementation uses [https://crates.io/crates/xml-rs xml-rs], which provides a streaming reader API.
 
<langsyntaxhighlight lang="rust">extern crate xml; // provided by the xml-rs crate
use xml::{name::OwnedName, reader::EventReader, reader::XmlEvent};
 
Line 3,115:
}
Ok(())
}</langsyntaxhighlight>
 
{{out}}
Line 3,131:
This DOM can then be iterated in a convenient fashion.
 
<langsyntaxhighlight lang="rust">extern crate roxmltree;
 
const DOCUMENT: &str = r#"
Line 3,158:
Ok(())
}
</syntaxhighlight>
</lang>
 
{{out}}
Line 3,173:
Scala has native XML support, with query constructs similar to XPath and XQuery.
 
<langsyntaxhighlight lang="scala">val students =
<Students>
<Student Name="April" Gender="F" DateOfBirth="1989-01-02" />
Line 3,184:
</Students>
 
students \ "Student" \\ "@Name" foreach println</langsyntaxhighlight>
 
=={{header|Sidef}}==
{{trans|Perl}}
<langsyntaxhighlight lang="ruby">require('XML::Simple');
 
var ref = %S'XML::Simple'.XMLin('<Students>
Line 3,200:
</Students>');
 
ref{:Student}.each { say _{:Name} };</langsyntaxhighlight>
{{out}}
<pre>
Line 3,214:
Slate's XML Reader is still being developed at the time of this writing.
<langsyntaxhighlight lang="slate">slate[1]> [ |tree|
 
tree: (Xml SimpleParser newOn: '<Students>
Line 3,234:
Dave
&#x00C9;mily
Nil</langsyntaxhighlight>
 
=={{header|Tcl}}==
Using {{libheader|tDOM}}
<langsyntaxhighlight lang="tcl">package require tdom
set tree [dom parse $xml]
set studentNodes [$tree getElementsByTagName Student] ;# or: set studentNodes [[$tree documentElement] childNodes]
Line 3,244:
foreach node $studentNodes {
puts [$node getAttribute Name]
}</langsyntaxhighlight>
Using {{libheader|TclXML}}
<langsyntaxhighlight lang="tcl">package require xml
set parser [xml::parser -elementstartcommand elem]
proc elem {name attlist args} {
Line 3,253:
}
}
$parser parse $xml</langsyntaxhighlight>
 
Using just pure-Tcl (originally on http://wiki.tcl.tk/3919):
<langsyntaxhighlight Tcllang="tcl">proc xml2list xml {
regsub -all {>\s*<} [string trim $xml " \n\t<>"] "\} \{" xml
set xml [string map {> "\} \{#text \{" < "\}\} \{"} $xml]
Line 3,306:
}
}
}</langsyntaxhighlight>
 
=={{header|TUSCRIPT}}==
<langsyntaxhighlight lang="tuscript">
$$ MODE TUSCRIPT
MODE DATA
Line 3,331:
ENDLOOP
ENDCOMPILE
</syntaxhighlight>
</lang>
Output:
<pre>
Line 3,346:
The name Émily is properly converted from the HTML/XML escape syntax.
 
<langsyntaxhighlight lang="txr"><Students>
@(collect :vars (NAME GENDER YEAR MONTH DAY (PET_TYPE "none") (PET_NAME "")))
@ (cases)
Line 3,364:
@{NAME 12} @GENDER @YEAR-@MONTH-@DAY @PET_TYPE @PET_NAME
@ (end)
@(end)</langsyntaxhighlight>
 
Sample run:
Line 3,377:
To obtain the output specified in this task, we can simply reduce the @(output) block to this:
 
<langsyntaxhighlight lang="txr">@(output :filter :from_html)
@NAME
@(end)</langsyntaxhighlight>
 
<pre>
Line 3,389:
 
=={{header|VBA}}==
<langsyntaxhighlight lang="vb">Option Explicit
 
Const strXml As String = "" & _
Line 3,416:
End If
Set myNodes = Nothing
End Sub</langsyntaxhighlight>
{{out}}
<pre>April
Line 3,426:
=={{header|Vedit macro language}}==
This implementation finds all ''Student'' tags and then displays the contents of their ''Name'' parameter.
<langsyntaxhighlight lang="vedit">Repeat(ALL) {
Search("<Student|X", ERRBREAK)
#1 = Cur_Pos
Line 3,435:
Type_Block(#2, Cur_Pos)
Type_Newline
}</langsyntaxhighlight>
 
Output:
Line 3,445:
 
=={{header|Visual Basic .NET}}==
<langsyntaxhighlight lang="vbnet">Dim xml = <Students>
<Student Name="April"/>
<Student Name="Bob"/>
Line 3,457:
For Each name In names
Console.WriteLine(name)
Next</langsyntaxhighlight>
 
=={{header|Wren}}==
Line 3,463:
{{libheader|Wren-fmt}}
Wren doesn't currently have an XML parser though we don't really need one for this task as string pattern matching is sufficient to extract the student names.
<langsyntaxhighlight lang="ecmascript">import "/pattern" for Pattern
import "/fmt" for Conv
 
Line 3,496:
}
}
}</langsyntaxhighlight>
 
{{out}}
Line 3,509:
{{libheader|Wren-xsequence}}
Since the first version was written, the above XML parser has appeared and support for 'raw' strings has also been added to the language. Consequently, the solution can now be rewritten as follows, the output being the same as before.
<langsyntaxhighlight lang="ecmascript">import "./xsequence" for XDocument
 
var xml = """
Line 3,524:
var doc = XDocument.parse(xml)
var names = doc.root.elements("Student").map { |el| el.attribute("Name").value }.toList
System.print(names.join("\n"))</langsyntaxhighlight>
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">code ChOut=8, CrLf=9; \intrinsic routines
string 0; \use zero-terminated strings
 
Line 3,571:
CrLf(0);
];
]</langsyntaxhighlight>
 
{{out}}
Line 3,583:
 
=={{header|Yabasic}}==
<langsyntaxhighlight Yabasiclang="yabasic">// ========== routine for set code conversion ================
 
data 32, 173, 189, 156, 207, 190, 221, 245, 249, 184, 166, 174, 170, 32, 169, 238
Line 3,650:
name$ = convASCII$(mid$(xml$, p, p2 - p), "&#x")
print name$
loop</langsyntaxhighlight>
 
=={{header|zkl}}==
Uses regular expressions and the data is in a file identical to task description.<br/>
Assumes: a name attribute is complete in a line and only one name per line.
<langsyntaxhighlight lang="zkl">student:=RegExp(0'|.*<Student\s*.+Name\s*=\s*"([^"]+)"|);
unicode:=RegExp(0'|.*(&#x[0-9a-fA-F]+;)|);
xml:=File("foo.xml").read();
Line 3,672:
});
 
students.println();</langsyntaxhighlight>
{{out}}<pre>L("April","Bob","Chad","Dave","Émily")</pre>
 
10,333

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.