How to generate and use xml in c #?

I have not worked with XML after a while, can someone post the syntax needed to create and save the xml node structure, which is similar to the tree structure created by the recursive function.

Basically, I have a recursive function that saves the data found on the page (url) and then follows every URL found on this page and does the same with it. to verify this, I want the output as an XML file to disk so that I can see how it performs recursion and parsing.

The code I have is below. add to it the necessary xml calls needed to create the xml structure, as shown below. (please specify the full namespace so that I can see where the objects I need .net for this are needed).

page1.htm has 2 links to it:

<a href=page1_1.htm>
<a href=page1_2.htm>

page1_1.htm has 2 links to it

<a href=page1_1_a.htm> (this then will have some links also)
<a href=page1_1_b.htm> (this then will have no more links on it - dead end)

xml should do something like this:

<node url=page1.htm>
    ...<node url=page1_1_a.htm>
       ......    <node url="xxx.htm"/>
       ......    <node url="yyy.htm".>
    ... </node>
    ...<node url=page1_1_b.htm />

</node>
+3
source share
6 answers

I have this XML document that will be generated on the fly at runtime.

<?xml version="1.0" encoding="utf-8"?>
<wap-provisioningdoc>
  <characteristic type="BOOTSTRAP">
    <parm name="NAME" value="SYNCSETTINGS" />
  </characteristic>
  <characteristic type="APPLICATION">
    <parm name="APPID" value="w5" />
    <parm name="TO-NAPID" value="INTERNET" />
    <parm name="NAME" value="SYNCSETTINGS" />
    <parm name="ADDR" value="http://syncserver/sync" />
    <characteristic type="RESOURCE">
      <parm name="URI" value="pb" />
      <parm name="NAME" value="Contacts DB" />
      <parm name="AACCEPT" value="text/x-vcard" />
    </characteristic>
    <characteristic type="RESOURCE">
      <parm name="URI" value="cal" />
      <parm name="NAME" value="Calendar DB" />
      <parm name="AACCEPT" value="text/x-vcalendar" />
    </characteristic>
    <characteristic type="RESOURCE">
      <parm name="URI" value="notes" />
      <parm name="NAME" value="Notes DB" />
      <parm name="AACCEPT" value="text/plain" />
    </characteristic>
    <characteristic type="APPAUTH">
      <parm name="AAUTHNAME" value="username" />
      <parm name="AAUTHSECRET" value="password" />
    </characteristic>
  </characteristic>
</wap-provisioningdoc>

This is how I generated this XML document using C # 3.0 and Linq.

public string CreateOTAXmlFile(string Username, string Password)
    {
        var ota = new XDocument(
                    new XElement("wap-provisioningdoc",
                        new XElement("characteristic", new XAttribute("type", "BOOTSTRAP"),
                            new XElement("parm", new XAttribute("name", "NAME"), new XAttribute("value", "SYNCSETTINGS"))
                                    ),
                        new XElement("characteristic", new XAttribute("type", "APPLICATION"),
                            new XElement("parm", new XAttribute("name", "APPID"), new XAttribute("value", "w5")),
                            new XElement("parm", new XAttribute("name", "TO-NAPID"), new XAttribute("value", "INTERNET")),
                            new XElement("parm", new XAttribute("name", "NAME"), new XAttribute("value", "SYNCSETTINGS")),
                            new XElement("parm", new XAttribute("name", "ADDR"), new XAttribute("value", "http://syncserver/sync")),
                            new XElement("characteristic", new XAttribute("type", "RESOURCE"),
                                new XElement("parm", new XAttribute("name", "URI"), new XAttribute("value", "pb")),
                                new XElement("parm", new XAttribute("name", "NAME"), new XAttribute("value", "Contacts DB")),
                                new XElement("parm", new XAttribute("name", "AACCEPT"), new XAttribute("value", "text/x-vcard"))
                                        ),
                            new XElement("characteristic", new XAttribute("type", "RESOURCE"),
                                new XElement("parm", new XAttribute("name", "URI"), new XAttribute("value", "cal")),
                                new XElement("parm", new XAttribute("name", "NAME"), new XAttribute("value", "Calendar DB")),
                                new XElement("parm", new XAttribute("name", "AACCEPT"), new XAttribute("value", "text/x-vcalendar"))
                                        ),
                            new XElement("characteristic", new XAttribute("type", "RESOURCE"),
                                new XElement("parm", new XAttribute("name", "URI"), new XAttribute("value", "notes")),
                                new XElement("parm", new XAttribute("name", "NAME"), new XAttribute("value", "Notes DB")),
                                new XElement("parm", new XAttribute("name", "AACCEPT"), new XAttribute("value", "text/plain"))
                                        ),
                            new XElement("characteristic", new XAttribute("type", "APPAUTH"),
                                new XElement("parm", new XAttribute("name", "AAUTHNAME"), new XAttribute("value", Username)),
                                new XElement("parm", new XAttribute("name", "AAUTHSECRET"), new XAttribute("value", Password))
                                        )
                                    )
                                )
                            );

        ota.Save(Server.MapPath("~/OTA/") + Username + ".xml");
        return (ota.ToString());

    }
+1
source

To run, try the following namespace, it has all the classes for generating and manipulating xml

  • System.Xml Space

    XmlTextWriter xWriter = new XmlTextWriter(Console.Out);    
    xWriter.WriteStartElement("prefix", "Element1", "namespace"); 
    xWriter.WriteStartAttribute("prefix", "Attr1", "namespace1"); 
    xWriter.WriteString("value1"); 
    xWriter.WriteStartAttribute("prefix", "Attr2", "namespace2"); 
    xWriter.WriteString("value2"); 
    xWriter.Close();
    

LINQ,

XDocument srcTree = new XDocument(
    new XComment("This is a comment"),
    new XElement("Root",
        new XElement("Child1", "data1"),
        new XElement("Child2", "data2"),        
    )
);

XDocument doc = new XDocument(
    new XComment("This is a comment"),
    new XElement("Root",
        from el in srcTree.Element("Root").Elements()
        where ((string)el).StartsWith("data")
        select el
    )
);
Console.WriteLine(doc);
+2

Another option is to use XML Serialization to convert for you if you already have an object tree.

+1
source

The objects you want are in the namespace System.Xml.

XmlDocument doc = new XmlDocument();

doc.AppendChild(CreateNodeElement(doc, rootNode));

doc.Save(fileName);

...

private XmlElement CreateNodeElement(XmlDocument doc, Node node)
{
    XmlElement output = doc.CreateElement("node");

    output.Attributes.Append(doc.CreateAttribute("url")).Value = node.Url;

    foreach(Node child in node.Links)
    {
        output.AppendChild(CreateNodeElement(doc, child));
    }

    return output;
}
0
source

If you are using 3.5 or higher, use the last and largest XDocument class. That would make you fall in love!

0
source

Source: https://habr.com/ru/post/1743205/


All Articles