Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 938
  • Last Modified:

save System.Xml.XmlDocument object into native xml sql field

Hello,

I have a code to create a xml structure using System.Xml.XmlDocument class.
I want to save this datas into a native xml sql field, but I don't find the way to achive it.
Can you help me in this issue. I know there is saveTo method to save to file in a specific path, but I want to save into database.

Thanks.
XmlDocument xmldoc;
            XmlNode xmlnode;
            XmlElement xmlelem;
            
 
            xmldoc = new XmlDocument();
            //let's add the XML declaration section
            xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
            xmldoc.AppendChild(xmlnode);
            //let's add the root element
            xmlelem=xmldoc.CreateElement("","Sobre_B","");
            xmldoc.AppendChild(xmlelem);
            for (int sobre = 0; sobre < 3; sobre++) // 3 sobres
            {
                xmlelem = xmldoc.CreateElement("", "sobre_A", "");
                xmldoc.ChildNodes.Item(1).AppendChild(xmlelem);
                for (int pieza = 0; pieza < 4; pieza++) // 4 piezas (piezas)
                {
                    xmlelem = xmldoc.CreateElement("", "pieza", "");
                    xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).AppendChild(xmlelem);
                    xmlelem = xmldoc.CreateElement("", "coddos", "");
                    xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).AppendChild(xmlelem);
                    xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).ChildNodes.Item(0).InnerText = ((pieza+1) * (sobre+1)).ToString("00000");
 
                    xmlelem = xmldoc.CreateElement("", "cousco", "");
                    xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).AppendChild(xmlelem);
                    xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).ChildNodes.Item(1).InnerText = ((pieza+1) * (sobre+1)).ToString("00000") + ".01";
 
                    xmlelem = xmldoc.CreateElement("", "e_Anverso", "");
                    xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).AppendChild(xmlelem);
                    xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).ChildNodes.Item(2).InnerText = "c:\\anverso.jpg";
 
                    xmlelem = xmldoc.CreateElement("", "e_Reverso", "");
                    xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).AppendChild(xmlelem);
                    xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).ChildNodes.Item(3).InnerText = "c:\\reverso.jpg";
                }
            }

Open in new window

0
imusa
Asked:
imusa
1 Solution
 
Jens FiedererTest Developer/ValidatorCommented:
There isn't much to this - just save the xml as a string (xmldoc.outerXml) to the table.

With a very trivial table (just a string name and an xml xmlitem),  I added a page to the ClubSiteExtended starter kit (not important though, the same thing would work anywhere)

The main part of the code was
        SqlDataSource1.InsertParameters["xml"].DefaultValue = xmldoc.OuterXml;
        SqlDataSource1.Insert();


The .aspx
---------------------------
<%@ Page Title="" Language="C#" MasterPageFile="~/Default.master" AutoEventWireup="true"
    CodeFile="xmls.aspx.cs" Inherits="xmls" %>
 
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <asp:TextBox ID="name" runat="server" />
    <asp:Button ID="run" runat="server" Text="Save" OnClick="run_Click" />
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ClubSiteDB %>"
        InsertCommand="INSERT INTO xmlitems(name,xml) VALUES (@name, @xml)" SelectCommand="SELECT [name], [xml] FROM [xmlitems]"
        UpdateCommand="UPDATE xmlitems SET xml = @xml WHERE (name = @name)">
        <InsertParameters>
            <asp:ControlParameter ControlID="name" Name="name" PropertyName="Text" />
            <asp:Parameter Name="xml" />
        </InsertParameters>
        <UpdateParameters>
            <asp:ControlParameter ControlID="name" Name="name" PropertyName="Text" />
            <asp:Parameter Name="xml" />
        </UpdateParameters>
    </asp:SqlDataSource>
</asp:Content>
---------------------------
 
The code-behind:
---------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
 
public partial class xmls : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
 
    }
    protected void run_Click(object sender, EventArgs e)
    {
        XmlDocument xmldoc;
        XmlNode xmlnode;
        XmlElement xmlelem;
 
 
        xmldoc = new XmlDocument();
        //let's add the XML declaration section
        xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
        xmldoc.AppendChild(xmlnode);
        //let's add the root element
        xmlelem = xmldoc.CreateElement("", "Sobre_B", "");
        xmldoc.AppendChild(xmlelem);
        for (int sobre = 0; sobre < 3; sobre++) // 3 sobres
        {
            xmlelem = xmldoc.CreateElement("", "sobre_A", "");
            xmldoc.ChildNodes.Item(1).AppendChild(xmlelem);
            for (int pieza = 0; pieza < 4; pieza++) // 4 piezas (piezas)
            {
                xmlelem = xmldoc.CreateElement("", "pieza", "");
                xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).AppendChild(xmlelem);
                xmlelem = xmldoc.CreateElement("", "coddos", "");
                xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).AppendChild(xmlelem);
                xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).ChildNodes.Item(0).InnerText = ((pieza + 1) * (sobre + 1)).ToString("00000");
 
                xmlelem = xmldoc.CreateElement("", "cousco", "");
                xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).AppendChild(xmlelem);
                xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).ChildNodes.Item(1).InnerText = ((pieza + 1) * (sobre + 1)).ToString("00000") + ".01";
 
                xmlelem = xmldoc.CreateElement("", "e_Anverso", "");
                xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).AppendChild(xmlelem);
                xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).ChildNodes.Item(2).InnerText = "c:\\anverso.jpg";
 
                xmlelem = xmldoc.CreateElement("", "e_Reverso", "");
                xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).AppendChild(xmlelem);
                xmldoc.ChildNodes.Item(1).ChildNodes.Item(sobre).ChildNodes.Item(pieza).ChildNodes.Item(3).InnerText = "c:\\reverso.jpg";
            }
        }
        SqlDataSource1.InsertParameters["xml"].DefaultValue = xmldoc.OuterXml;
        SqlDataSource1.Insert();
    }
}
---------------------------

Open in new window

0
 
imusaAuthor Commented:
OuterXml method was I need.

Tanks,
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now