Avalonia solo in codiceEnglish

Dalla documentazione di RAVAL, la libreria MIT dei libri: la stessa che sta nel suo repository.

Dati da JSON e XML — RAVAL 2.4

RNode è l'albero dei dati di un file JSON o XML: si legge, si interroga con un percorso, si cambia e si riscrive. Non usa nessun tipo di Avalonia: va bene in un servizio, in un programma a riga di comando, in una prova. Per vederlo in una finestra c'è RTree (scheda RGrafica.md).

Spiegazione con gli esempi: TUTORIAL.md, capitolo 17. Ogni membro, con la sua firma, è nel riferimento API.md. Le prove sono in TEST_RAVAL\ProveAlbero.cs (Dati).

Data\RNode.cs

RNode p = RNode.Load("progetto.json");               // «.xml»: XML; il resto: JSON
int porta = p.GetInt("server.port", 5080);
string v = p.GetString("componenti[1].valore", "");
int x = RNode.FromXml(testo).GetInt("server/@port", 80, "/");
p.Find("server.port")!.Set(5081);
p["componenti"]!.Add(RNode.Object().Add(RNode.Text("nome", "C4")));
p.Save("progetto.json");
MembroFa
RNode.Load(file) · FromJson(testo) · FromXml(testo)il file letto tutto; JSON con commenti e virgole finali accettati; XML con gli attributi «@nome» come primi figli e il testo come valore
Kind (RNodeKind) · Name · Value · IsTextoggetto, lista, valore, elemento o attributo; il nome («[i]» in una lista, «@nome» per un attributo); il valore come testo; se nel JSON va fra virgolette
Children · Count · this[nome] · Child · At(i) · Parenti figli in ordine di file
Find(percorso, sep) · Path(sep) · Descendants()«server.port», «items[2].name», «server/@port» con «/»; la radice senza nome (JSON) non compare nel percorso
GetString · GetInt · GetDouble · GetBool · GetListle letture con il predefinito, i numeri con il punto, sì/no come in RSettings
RNode.Object · Array · Text · Number · Bool · Element · Attributenodi nuovi; Add e Remove (in una lista i figli si rinumerano)
Set(testo) · Set(numero) · Set(sì/no)cambiano un valore; il testo si riscrive fra virgolette, il resto no
ToJson() · ToJsonNode() · ToXml() · Save(file)la scrittura: JSON rientrato con gli accenti come sono; un XML in JSON (attributi «@nome», testo «#text», nomi ripetuti in una lista); un JSON in XML («root», elementi «item»); il file via un temporaneo rinominato
Source · Tagil JsonNode, l'XElement o l'XAttribute letto; quello che serve al programma

Perché è fatta così

  • Una classe sola per JSON e XML. Chi legge un file vuole un valore a un percorso, non la differenza fra JsonObject e XElement; il tipo resta in Kind per chi ne ha bisogno.
  • Lo stesso percorso di RSettings e di RTreeNode: il nodo scelto in un albero dice la chiave da leggere nel file.
  • Separata da Avalonia. RTreeNode, il nodo dell'albero visuale, ha colori e voci sullo schermo; RNode no. La prova controlla che nessuna firma di RNode nomini un tipo di Avalonia.