Loïc TRUCHOT
JavaScript Fullstack Expert & Senior web developer
est il encore utile en 2020 ?
CC-BY-NC-4.0 / Septembre 2020 / Loïc TRUCHOT
// Read the file and print its contents as an array.
var fs = require("fs");
var content = fs.readFileSync("./toto.txt", "utf8");
var livres = content.split("\r\n");
console.log(livres);
JavaScript Object Notation
eXtensible Markup Language
Yet Another Markup Language
et XHTML... Des formats déjà contraints, basés sur XML qui est libre et extensible
<livre>
<titre>SICP</titre>
<auteur>Hal Abelson</auteur>
</livre>
"livre": {
"titre": "SICP",
"auteur": "Hal Abelson"
}
livre:
titre: SICP
auteur: Hal Abelson
var parser = require("fast-xml-parser");
var fs = require("fs");
var content = fs.readFileSync("./books.xml", "utf8");
if (parser.validate(content)) {
var xmlData = parser.parse(content);
console.log(xmlData.livre);
}
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<racine>
<balise attr="valeur">valeur</balise>
<balise attr="valeur">valeur</balise>
<arbo>
<branche attr="valeur">valeur</branche>
</arbo>
<!-- Et un petit commentaire -->
</racine>
Pas de règle universelle...
import axios from 'axios';
import convert from 'xml-js';
axios
.get('https://mini-xml-server.committers.ngo/books.xml')
.then((response) => {
var data = convert.xml2js(response.data, { compact: true });
for (var livre of data.livres.livre) {
var el = document.createElement('div');
el.innerText = livre.auteur._text;
document.body.appendChild(el);
}
});
https://fr.wikipedia.org/w/api.php?page=Moineau domestique
&format=xml&action=parse
<lien>
<titre>Elm</titre>
<image>https://toto.png</image>
<url>https://elm-lang.org/</url>
<desc>Le meilleur language de programmation.</desc>
<nom>Loïc T.</nom>
</lien>
axios
.post('https://mini-xml-server.committers.ngo/portail', xmlStr, {
headers: { 'Content-Type': 'application/xml' },
})
.then((response) => {
console.log(response);
});
<?xml version = "1.0" encoding="UTF-8" ?>
<!DOCTYPE livres [
<!ELEMENT livres (livre*)>
<!ELEMENT livre (titre, auteur)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT titre (#PCDATA)>
<!ATTLIST titre soustitre CDATA #IMPLIED>
]>
<livres>
<livre>
<titre soustitre="toto">SICP</titre>
<auteur>Hal Abelson</auteur>
</livre>
<livre>
<titre>PICS</titre>
<auteur>Hal Abelson</auteur>
</livre>
<livre>
<titre soustitre="titi">PSIC</titre>
<auteur>Hal Abelson</auteur>
</livre>
</livres>
<?xml version = "1.0" encoding="UTF-8" ?>
<!DOCTYPE livres [
<!ELEMENT livres (titre, livre*)>
<!ELEMENT livre (titre+, vendu*)>
<!ELEMENT titre (#PCDATA|(nom,categorie))>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT categorie (#PCDATA)>
<!ELEMENT vendu EMPTY>
<!ATTLIST titre
soustitre CDATA #IMPLIED
prix CDATA #IMPLIED
>
]>
<livres>
<titre>
<nom>Les livres noirs</nom>
<categorie>policier</categorie>
</titre>
<livre>
<titre soustitre="toto" prix="34">
SICP
</titre>
<vendu />
</livre>
<livre>
<titre>PICS</titre>
</livre>
</livres>
<?xml version="1.0"?>
<!DOCTYPE tutorials [
<!ENTITY header "Bienvenue sur ce tuto !">
<]>
<tutorials>
<tutorial>
<name>XML</name>
<header>&header;</header>
</tutorial>
<tutorial>
<name>HTML</name>
<header>&header;</header>
</tutorial>
</tutorials>
<!ELEMENT livres (livre*)>
<!ELEMENT livre (titre, auteur)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT titre (#PCDATA)>
<!ATTLIST titre soustitre CDATA #IMPLIED>
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE livres SYSTEM "livres.dtd">
<livres>
<livre>
<titre>SICP</titre>
<auteur>Hal Abelson</auteur>
</livre>
<livre>
<titre>The Little Schemer</titre>
<auteur>D. Friedman</auteur>
</livre>
</livres>
livres.xml
livres.dtd
Comme en HTML,
sur une ou plusieurs lignes
Echapper plus d'un caratère peut vite devenir problématique
Dans ce cas, utiliser CDATA
<text>
<![CDATA[
1 < 3 mais 1 > 0...
]]>
</text>
<text>
<!-- FIXME: trouver un texte -->
</text>
Sous VS-code:
// vs code settings
"xml.java.home": "C:\\Program Files (x86)\\Java\\jre1.8.0_261",
"xml.validation.enabled": true
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="livres" />
<xs:element name="livre">
<xs:complexType>
<xs:sequence>
<xs:element name="titre" type="xs:string"/>
<xs:element name="auteur" type="xs:string"/>
<xs:element name="annee" type="xs:integer"/>
<xs:element name="prix" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<livres
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="livres.xsd">
<livre>
<titre>SICP</titre>
<auteur>Hal Abelson</auteur>
<annee>1979</annee>
<prix>49.99</prix>
</livre>
</livres>
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="livres" />
<xs:element name="livre">
<xs:complexType>
<xs:sequence>
<xs:element name="titre" type="xs:string"/>
<xs:element name="auteur" type="xs:string"/>
<xs:element name="annee" type="xs:integer"/>
<xs:element name="prix">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="devise" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="en_stock" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<livres
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="livres.xsd">
<livre en_stock="true">
<titre>SICP</titre>
<auteur>Hal Abelson</auteur>
<annee>1979</annee>
<prix devise="euro">49.99</prix>
</livre>
</livres>
<xs:element name="prix">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="devise" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="livre">
<xs:complexType>
<xs:sequence>
<xs:element name="titre" type="xs:string"/>
<xs:element name="auteur" type="xs:string"/>
<xs:element name="annee" type="xs:integer"/>
<xs:element ref="prix" />
</xs:sequence>
<xs:attribute name="en_stock" type="xs:boolean" />
</xs:complexType>
</xs:element>
<?xml version="1.0"?>
<animaux>
<animal visite="true">
<name>Puce</name>
<age>14</age>
<type>chat</type>
<color>argent</color>
</animal>
<animal visite="false">
<name>Amanda</name>
<age>10</age>
<type>chien</type>
<color>marron</color>
</animal>
<animal visite="false">
<name>Jack</name>
<age>3</age>
<type>chat</type>
<color>noir</color>
</animal>
<animal visite="true">
<name>Bernard</name>
<age>12</age>
<type>chien</type>
<color>bleu</color>
</animal>
<animal visite="false">
<name>Naia</name>
<age>1</age>
<type>chat</type>
<color>marron</color>
</animal>
<animal visite="true">
<name>Stop</name>
<age>5</age>
<type>cochon</type>
<color>marron</color>
</animal>
</animaux>
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
THANK'S EVERYONE
It's finally done ! See you soon
By Loïc TRUCHOT
Formation au XML.