1 // dom_rw
 2 
 3 using System;
 4 
 5 public UniquePtr<System.Xml.Document> CreateDoc()
 6 {
 7     UniquePtr<System.Xml.Document> doc(System.Xml.MakeDocument());
 8     UniquePtr<System.Xml.Element> phs(System.Xml.MakeElement("philosophers"));
 9     UniquePtr<System.Xml.Element> ph1(System.Xml.MakeElement("philosopher"));
10     ph1->SetAttribute("name""Plato");
11     phs->AppendChild(ph1.Release());
12     UniquePtr<System.Xml.Element> ph2(System.Xml.MakeElement("philosopher"));
13     ph2->SetAttribute("name""Aristotle");
14     phs->AppendChild(ph2.Release());
15     UniquePtr<System.Xml.Element> ph3(System.Xml.MakeElement("philosopher"));
16     ph3->SetAttribute("name""Socrates");
17     phs->AppendChild(ph3.Release());
18     doc->AppendChild(phs.Release());
19     return doc;
20 }
21 
22 [nodiscard]
23 public Result<bool> WriteDocToFile(System.Xml.Document* doc)
24 {
25     auto createResult = System.IO.File.CreateText("philosophers.xml");
26     if (createResult.Error())
27     {
28         return Result<bool>(ErrorId(createResult.GetErrorId()));
29     }
30     System.IO.StreamWriter& writer = createResult.Value();
31     System.Text.CodeFormatter formatter(writer);
32     formatter.SetIndentSize(1);
33     auto writeResult = doc->Write(formatter);
34     if (writeResult.Error())
35     {
36         return writeResult;
37     }
38     return Result<bool>(true);
39 }
40 
41 [nodiscard]
42 public Result<UniquePtr<System.Xml.Document>> ReadDocFromFile(System.Lex.FileMap& fileMap)
43 {
44     auto result = System.Xml.ParseXmlDocument("philosophers.xml"fileMap);
45     if (result.Error())
46     {
47         Result<UniquePtr<System.Xml.Document>>(ErrorId(result.GetErrorId()));
48     }
49     UniquePtr<System.Xml.Document> doc = Rvalue(result.Value());
50     return Result<UniquePtr<System.Xml.Document>>(Rvalue(doc));
51 }
52 
53 [nodiscard]
54 public Result<bool> WriteDocToConsole(System.Xml.Document* doc)
55 {
56     System.Text.CodeFormatter formatter(Console.Out());
57     formatter.SetIndentSize(4);
58     auto result = doc->Write(formatter);
59     if (result.Error())
60     {
61         return result;
62     }
63     return Result<bool>(true);
64 }
65 
66 int main()
67 {
68     UniquePtr<System.Xml.Document> doc = CreateDoc();
69     auto result = WriteDocToFile(doc.Get());
70     if (result.Error())
71     {
72         Console.Error() << result.GetErrorMessage() << endl();
73         return 1;
74     }
75     System.Lex.FileMap fileMap;
76     Result<UniquePtr<System.Xml.Document>> readResult = ReadDocFromFile(fileMap);
77     if (readResult.Error())
78     {
79         Console.Error() << readResult.GetErrorMessage() << endl();
80         return 1;
81     }
82     System.Xml.Document* docRead = readResult.Value().Get();
83     result = WriteDocToConsole(docRead);
84     if (result.Error())
85     {
86         Console.Error() << result.GetErrorMessage() << endl();
87         return 1;
88     }
89     return 0;
90 }