You're welcome Paul.
Good luck!
Steven Cheng
Microsoft Online Support
Get Secure!
www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)
--------------------
| From: "Paul" <pa*****@commun ity.nospam>
| References: <uh************ *@TK2MSFTNGP15. phx.gbl>
<z#************ **@TK2MSFTNGXA0 1.phx.gbl>
<OY************ **@TK2MSFTNGP10 .phx.gbl>
<sp************ **@TK2MSFTNGXA0 1.phx.gbl>
| Subject: Re: Add XmlNode
| Date: Fri, 28 Oct 2005 11:32:13 -0700
| Lines: 311
| X-Priority: 3
| X-MSMail-Priority: Normal
| X-Newsreader: Microsoft Outlook Express 6.00.2900.2180
| X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
| X-RFC2646: Format=Flowed; Original
| Message-ID: <Oi************ **@TK2MSFTNGP12 .phx.gbl>
| Newsgroups: microsoft.publi c.dotnet.xml
| NNTP-Posting-Host: 66.236.123.34.p tr.us.xo.net 66.236.123.34
| Path: TK2MSFTNGXA01.p hx.gbl!TK2MSFTN GP08.phx.gbl!TK 2MSFTNGP12.phx. gbl
| Xref: TK2MSFTNGXA01.p hx.gbl microsoft.publi c.dotnet.xml:91 11
| X-Tomcat-NG: microsoft.publi c.dotnet.xml
|
| Thanks again, Steven.
|
| Based on your response, the approach I'm going to take is to generate the
| prefixes myself which I've implemented and it appears to work.
|
| Anyway, your help got me out of a corner, thank you.
|
| Paul
|
| "Steven Cheng[MSFT]" <st*****@online .microsoft.com> wrote in message
| news:sp******** ******@TK2MSFTN GXA01.phx.gbl.. .
| > Thanks for your response Paul,
| >
| > As for namespace prefix, it doesn't matter much. Namespace prefix is
just
| > like an alias of the actual Namespace URI, so we can choose
discretionary
| > ones as we like. And prefix value won't make XML document different as
| > long as the Namespace URI is the same between multiple documents.
| > e.g.
| >
| > the following xmlelement is identical to each other:
| > [1]
| > <ns0:hello xmlns:ns0="http ://www.hello.org" >
| > <ns0:helloWorld >hello</ns0:helloWorld>
| > </ns0:hello>
| >
| > [2]
| > <ns1:hello xmlns:ns1="http ://www.hello.org">
| > <ns1:helloWorld >hello</ns1:helloWorld>
| > </ns1:hello>
| >
| > though the namespace prefix is different( "ns0" and "ns1"), their actual
| > Namespace URI are the same. So they're identical.
| >
| > Thanks,
| >
| > Steven Cheng
| > Microsoft Online Support
| >
| > Get Secure!
www.microsoft.com/security
| > (This posting is provided "AS IS", with no warranties, and confers no
| > rights.)
| >
| >
| >
| > --------------------
| > | From: "Paul" <pa*****@commun ity.nospam>
| > | References: <uh************ *@TK2MSFTNGP15. phx.gbl>
| > <z#************ **@TK2MSFTNGXA0 1.phx.gbl>
| > | Subject: Re: Add XmlNode
| > | Date: Thu, 27 Oct 2005 10:04:59 -0700
| > | Lines: 222
| > | X-Priority: 3
| > | X-MSMail-Priority: Normal
| > | X-Newsreader: Microsoft Outlook Express 6.00.2900.2180
| > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
| > | X-RFC2646: Format=Flowed; Original
| > | Message-ID: <OY************ **@TK2MSFTNGP10 .phx.gbl>
| > | Newsgroups: microsoft.publi c.dotnet.xml
| > | NNTP-Posting-Host: 66.236.123.34.p tr.us.xo.net 66.236.123.34
| > | Path: TK2MSFTNGXA01.p hx.gbl!TK2MSFTN GP08.phx.gbl!TK 2MSFTNGP10.phx. gbl
| > | Xref: TK2MSFTNGXA01.p hx.gbl microsoft.publi c.dotnet.xml:91 00
| > | X-Tomcat-NG: microsoft.publi c.dotnet.xml
| > |
| > | Hello Steven and thank you for your reply!!
| > |
| > | Your solution worked well and it seems that
| > | the part I was missing was that I needed to ask
| > | the document to create the new XmlAttribute and not
| > | the newly created node.
| > |
| > | I do have a followup question. In your solution you hard-
| > | code the namespace prefix 'a4' as follows:
| > |
| > | doc.CreateAttri bute("xmlns","a 4","http://www.w3.org/2000/xmlns/");
| > | nsattr.InnerTex t =
| > |
| >
"http://schemas.microso ft.com/clr/nsassem/OsfDomain.Resou rces.Stage/OsfDomai
| > |
| >
n%2C%20Version% 3D1.0.0.1%2C%20 Culture%3Dneutr al%2C%20PublicK eyToken%3Dnull" ;
| > |
| > |
| > | But what if I don't know what the prefix is? It seems that I should
ask
| > the
| > | document
| > | to generate a new one for me if one doesn't already exist. But on
| > | XmlDocument I only
| > | see:
| > |
| > | GetPrefixOfName space and
| > | GetNamespaceOfP refix
| > |
| > | Paul
| > |
| > |
| > |
| > | "Steven Cheng[MSFT]" <st*****@online .microsoft.com> wrote in message
| > | news:z%******** **********@TK2M SFTNGXA01.phx.g bl...
| > | > Hi Paul,
| > | >
| > | > Welcome to MSDN newsgroup.
| > | > Regarding the adding XmlNode into XmlDocument question you
mentioned,
| > we
| > | > can just use the XmlDocument.Cre ateElement to create a Element xml
| > node
| > | > and
| > | > then locate the parent node where we want to append the new element.
| > Then,
| > | > we can use the XmlElement(XmlN ode) 's AppendChild method to add the
| > new
| > | > element. Also, in your scenario, your element has some additional
| > | > namespace declaration attributes, we need to append them into the
new
| > | > element or in the document also. here is a simple example on
creating
| > a
| > | > new
| > | > xmlelement and add into a existing xmldoument:
| > | >
| > | > the original document is like:
| > | >
| > | > =============== ==
| > | > <?xml version="1.0" encoding="utf-8" ?>
| > | > <root xmlns="http://www.mytest.org" >
| > | > <datas>
| > | > <data id="1">
| > | > <item>fsfdsfs </item>
| > | > </data>
| > | > <data id="2">
| > | > <item>fksfjkdsj fdks</item>
| > | > </data>
| > | > </datas>
| > | > </root>
| > | > =============== ====
| > | >
| > | > the code that modify the document is:
| > | > =============== =====
| > | > static void RunXmlDoc()
| > | > {
| > | > XmlDocument doc = new XmlDocument();
| > | > doc.Load(@"..\. .\testxml.xml") ;
| > | >
| > | > XmlElement elm = doc.CreateEleme nt("PayPerferen ce");
| > | >
| > | > elm.InnerText = "cash";
| > | >
| > | >
| > | > XmlAttribute nsattr = null;
| > | >
| > | > nsattr =
| > | > doc.CreateAttri bute("xmlns","x si","http://www.w3.org/2000/xmlns/");
| > | > nsattr.InnerTex t = "http://www.w3.org/2001/XMLSchema-instance";
| > | >
| > | > elm.Attributes. Append(
| > | > nsattr
| > | > );
| > | >
| > | > //
| > | > nsattr =
| > | > doc.CreateAttri bute("xmlns","a 4","http://www.w3.org/2000/xmlns/");
| > | > nsattr.InnerTex t =
| > | >
| >
"http://schemas.microso ft.com/clr/nsassem/OsfDomain.Resou rces.Stage/OsfDomai
| > | >
| >
n%2C%20Version% 3D1.0.0.1%2C%20 Culture%3Dneutr al%2C%20PublicK eyToken%3Dnull" ;
| > | >
| > | > elm.Attributes. Append(
| > | > nsattr
| > | > );
| > | >
| > | >
| > | > nsattr =
| > | >
| >
doc.CreateAttri bute("xsi","typ e","http://www.w3.org/2001/XMLSchema-instance"
| > | > );
| > | > nsattr.InnerTex t = "a4:Customer+Cu stomerPayOption s";
| > | > elm.Attributes. Append(
| > | > nsattr
| > | > );
| > | >
| > | > XmlNamespaceMan ager manager = new
XmlNamespaceMan ager(doc.NameTa ble);
| > | > manager.AddName space("ns1","ht tp://www.mytest.org" );
| > | >
| > | > XmlElement datas =
doc.SelectSingl eNode("/ns1:root/ns1:datas",mana ger)
| > | > as XmlElement;
| > | >
| > | > datas.AppendChi ld(elm);
| > | >
| > | >
| > | >
| > | > Console.WriteLi ne(doc.OuterXml );
| > | >
| > | > doc.Save("outpu t.xml");
| > | >
| > | > }
| > | > =============== ============
| > | >
| > | > The output.xml will be something like;
| > | >
| > | > =============== =========
| > | > <?xml version="1.0" encoding="utf-8"?>
| > | > <root xmlns="http://www.mytest.org" >
| > | > <datas>
| > | > <data id="1">
| > | > <item>fsfdsfs </item>
| > | > </data>
| > | > <data id="2">
| > | > <item>fksfjkdsj fdks</item>
| > | > </data>
| > | > <PayPerferenc e
| > xmlns:xsi="http ://www.w3.org/2001/XMLSchema-instance"
| > | >
| >
xmlns:a4="http://schemas.microso ft.com/clr/nsassem/OsfDomain.Resou rces.Stage
| > | >
| >
/OsfDomain%2C%20 Version%3D1.0.0 .1%2C%20Culture %3Dneutral%2C%2 0PublicKeyToken
| > | > %3Dnull" xsi:type="a4:Cu stomer+Customer PayOptions"
| > | > xmlns="">cash</PayPerference>
| > | > </datas>
| > | > </root>
| > | > =============== =============
| > | >
| > | > Also, you can find the the "PayPerfere nce" element in the output
has
| > an
| > | > empty default namespace
| > | >
| > | > xmlns=""
| > | >
| > | > you can explicitly specify the default namespace by changing the
| > | > XmlElement's construction to below:
| > | >
| > | > XmlElement elm =
| > | > doc.CreateEleme nt("PayPerferen ce","http://www.mycustomapp .com");
| > | >
| > | > Hope helps. Thanks,
| > | >
| > | > Steven Cheng
| > | > Microsoft Online Support
| > | >
| > | > Get Secure!
www.microsoft.com/security
| > | > (This posting is provided "AS IS", with no warranties, and confers
no
| > | > rights.)
| > | >
| > | >
| > | >
| > | >
| > | >
| > | > --------------------
| > | > | From: "Paul" <pa*****@commun ity.nospam>
| > | > | Subject: Add XmlNode
| > | > | Date: Wed, 26 Oct 2005 11:29:29 -0700
| > | > | Lines: 28
| > | > | X-Priority: 3
| > | > | X-MSMail-Priority: Normal
| > | > | X-Newsreader: Microsoft Outlook Express 6.00.2900.2180
| > | > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
| > | > | X-RFC2646: Format=Flowed; Original
| > | > | Message-ID: <uh************ *@TK2MSFTNGP15. phx.gbl>
| > | > | Newsgroups: microsoft.publi c.dotnet.xml
| > | > | NNTP-Posting-Host: 66.236.123.34.p tr.us.xo.net 66.236.123.34
| > | > | Path:
| > TK2MSFTNGXA01.p hx.gbl!TK2MSFTN GP08.phx.gbl!TK 2MSFTNGP15.phx. gbl
| > | > | Xref: TK2MSFTNGXA01.p hx.gbl microsoft.publi c.dotnet.xml:90 85
| > | > | X-Tomcat-NG: microsoft.publi c.dotnet.xml
| > | > |
| > | > | Here I have the definition of an XmlNode which is a property
| > | > (PayPreference)
| > | > | on my Customer class containing an enum describing how the
customer
| > will
| > | > | pay.
| > | > |
| > | > | <PayPerferenc e xsi:type="a4:Cu stomer+Customer PayOptions"
| > | > |
| > | >
| >
xmlns:a4="http://schemas.microso ft.com/clr/nsassem/OsfDomain.Resou rces.Stage
| > | >
| >
/OsfDomain%2C%20 Version%3D1.0.0 .1%2C%20Culture %3Dneutral%2C%2 0PublicKeyToken
| > | > %3Dnull">cash</PayPerference>
| > | > |
| > | > | I now want to add this XmlNode to a different Xml file where the
| > | > Customer
| > | > | class has not defined a PayPreference property. I get as far as
| > | > locating
| > | > | the parent XmlNode (Customer). Now I just need to add the XmlNode
| > | > defined
| > | > | above. To do this, I understand that I need to ask the
XmlDocument
| > to
| > | > | create the node first before I ask the Customer node to
| > 'AppendChild'.
| > | > I
| > | > | notice 3 overloads of CreateElement on the XmlDocument to do this:
| > | > |
| > | > | CreateElement(s tring name)
| > | > | CreateElement(s tring qualifiedName, string namespaceURI)
| > | > | CreateElement(s tring prefix, string localName, string
| > namespaceURI)
| > | > |
| > | > | So now I'm stuck as to what I need to do now. Any help would be
| > | > | appreciated!
| > | > |
| > | > |
| > | > |
| > | > |
| > | > |
| > | > |
| > | > |
| > | > |
| > | > |
| > | >
| > |
| > |
| > |
| >
|
|
|