2011-08-09 13 views
7

मैं XmlWriter उपयोग करने के लिए (एक नाम स्थान में सभी) कुछ इस तरह लिखना चाहते हैं:नामस्थानों को सही तरीके से संभालने के लिए मैं XmlWriter को कैसे सहबद्ध कर सकता हूं?

<Root xmlns="http://tempuri.org/nsA"> 
    <Child attr="val" /> 
</Root> 

लेकिन सबसे करीब मैं पाने के लिए लग सकता है यह है:

<p:Root xmlns:p="http://tempuri.org/nsA"> 
    <p:Child p:attr="val" /> 
</p:Root> 

इस कोड का उपयोग:

using System; 
using System.Text; 
using System.Xml; 

namespace ConsoleApplication1 
{ 
    internal class Program 
    { 
     private const string ns = "http://tempuri.org/nsA"; 
     private const string pre = "p"; 

     private static void Main(string[] args) 
     { 
      var sb = new StringBuilder(); 
      var settings = new XmlWriterSettings 
        { 
         NamespaceHandling = NamespaceHandling.OmitDuplicates, 
              /* ineffective */    
         Indent = true 
        }; 
      using (XmlWriter writer = XmlWriter.Create(sb, settings)) 
      { 
       writer.WriteStartElement(pre, "Root", ns); 
       writer.WriteStartElement(pre, "Child", ns); 
       writer.WriteAttributeString(pre, "attr", ns, "val"); 
              // breaks namespaces  
       writer.WriteEndElement(); 
       writer.WriteEndElement(); 
      } 
      Console.WriteLine(sb.ToString()); 
     } 
    } 
} 

जब मैं एक उपसर्ग निर्दिष्ट नहीं है, मैं मिलता है:

<Root xmlns="http://tempuri.org/nsA"> 
    <Child p2:attr="val" xmlns:p2="http://tempuri.org/nsA" /> 
</Root> 

डुप्लिकेट नेमस्पेस में इन "प्रेत" उपसर्गों की पीढ़ी जेनरेट किए गए दस्तावेज़ (पी 3, पी 4, पी 5 आदि) में होती है।

जब मैं विशेषताओं को नहीं लिखता, तो मुझे वह आउटपुट मिलता है जो मुझे चाहिए (सिवाय इसके कि यह विशेषताएं अनुपलब्ध हैं)।

XmlWriter क्यों नहीं पूछा गया है डुप्लिकेट नेमस्पेस को छोड़कर?

उत्तर

4

इस तरह का प्रयास करें:

using System; 
using System.Text; 
using System.Xml; 

class Program 
{ 
    private const string ns = "http://tempuri.org/nsA"; 

    static void Main() 
    { 
     var settings = new XmlWriterSettings 
     { 
      Indent = true 
     }; 
     using (var writer = XmlWriter.Create(Console.Out, settings)) 
     { 
      writer.WriteStartElement("Root", ns); 
      writer.WriteStartElement("Child"); 
      writer.WriteAttributeString("attr", "", "val"); 
      writer.WriteEndElement(); 
      writer.WriteEndElement(); 
     } 
    } 
} 
+1

धन्यवाद! यह पूरी तरह से प्रतिद्वंद्वी होने के बावजूद काम करता है, क्योंकि गुणों में नामस्थान भी हैं। – lesscode

+0

या [SO] (http://stackoverflow.com/questions/2500111/how-do-i-add-a-default-namespace-with-no-prefix-using-xmlserializer) के डारिन उत्तर का उपयोग करें प्रश्न – SteveC

+0

कोई भी एक बेहतर समाधान मिला? यह एनएस प्रबंधन मान लिया जाता है कि स्वचालित होना चाहिए! :(मुझे विशेष रूप से यहां अंतिम उदाहरण पसंद है: http://msdn.microsoft.com/en-us/library/d1a1csew%28v=vs.80%29.aspx – Fowl

संबंधित मुद्दे

 संबंधित मुद्दे