[ DarkMan @ 14.02.2008. 00:12 ] @
Sledeci kod:
Code:

            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<Project DefaultTargets='Build' xmlns='http://schemas.microsoft.com/developer/msbuild/2003\'></Project>".Replace("'", "\x22"));
            XmlNode node = doc.CreateElement("Proba");
            
            doc.DocumentElement.AppendChild(node);
            Console.WriteLine("Attributes: " + node.Attributes.Count);
            Console.WriteLine("node.OuterXml: " + node.OuterXml);
            Console.WriteLine(doc.OuterXml);


daje sledeci rezultat:
Code:

Attributes: 0
node.OuterXml: <Proba />
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Proba xmlns="" /></Project>


Moj problem je sto mi je u node Proba dodao atribut xmlns="".
node.Attributes.Count kaze da nema atributa a i node.OuterXml ne daje taj xmlns pa pretpostavlja da je nesto do generisanja dokumenta ali ne znam gde.
Znam da se ovo moze ukoniti kada bi uklonio i xmlns iz root-a ali mi on treba.

[ mmix @ 14.02.2008. 11:03 ] @
Moras da navedes default namespace URI za svaki tag koji kreiras a koji ce biti dete tvog root-a. CreateElement ima overload koji prima xmlns namespace elementa i mozes da mu das onaj koji je u root-u:

Code:

            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"></Project>");
            XmlNode node = doc.CreateElement("Proba", doc.DocumentElement.NamespaceURI);

            doc.DocumentElement.AppendChild(node);
            Console.WriteLine("Attributes: " + node.Attributes.Count);
            Console.WriteLine("node.OuterXml: " + node.OuterXml);
            Console.WriteLine(doc.OuterXml);


i sad dobijes:

Code:

Attributes: 0
node.OuterXml: <Proba xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><Proba /></Project>


Attributes je nula zato sto se xmlns= i xmlns:xxx= ne tretira kao atribut od strane XML DOM-a. Ako budes kreirao atribute u tvojim nodovima, prica je drugacija, za razliku od tagova atribut nasledjuje namespace elementa u koji je umetnut. Cak ako navedes isti namespace u CreateAttribute, DOM ce napraviti neku ludoriju ovog tipa (sto je po meni propust u DOMu):

Code:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Proba d2p1:TestAttr="" xmlns:d2p1="http://schemas.microsoft.com/developer/msbuild/2003" />
</Project>
[ DarkMan @ 14.02.2008. 13:29 ] @
To je to, hvala!