2009-02-09 49 views
3

我有麻煩沿此線生成XML設置XML命名空間:與System.Xml.Linq的API

<Root xmlns:brk="http://somewhere"> 
<child1> 
    <brk:node1>123456</brk:node1> 
    <brk:node2>500000000</brk:node2> 
</child1> 
</Root> 

此代碼讓我最的方式,但我不能讓'brk'命名空間在節點前面;

var rootNode = new XElement("Root"); 
rootNode.Add(new XAttribute(XNamespace.Xmlns + "brk", "http://somewhere")); 

var childNode = new XElement("child1"); 
childNode.Add(new XElement("node1",123456)); 
rootNode.Add(childNode); 

我已經試過這樣:

XNamespace brk = "http://somewhere"; 
childNode.Add(new XElement(brk+"node1",123456)); 

XNamespace brk = "http://somewhere"; 
childNode.Add(new XElement("brk:node1",123456)); 

但兩者都將導致異常。

+0

你會得到什麼例外?當使用childNode.Add(new XElement(brk +「node1」,123456))時,我沒有得到任何異常和正確的結果。 – 2009-02-09 17:29:21

+0

System.Xml.XmlException:在同一起始元素標記內,前綴''不能從''重新定義爲'http:// somewhere'。 – Dan 2009-02-09 17:42:53

回答

3

你幾乎在那裏,但你在你的第一個代碼示例中犯了一個簡單的錯誤。我相信這是你需要什麼:

XNamespace brk = "http://somewhere.com"; 
XElement root = new XElement("Root", 
    new XAttribute(XNamespace.Xmlns + "brk", "http://somewhere.com")); 

XElement childNode = new XElement("child1"); 
childNode.Add(new XElement(brk + "node1",123456)); 
root.Add(childNode); 

這裏的主要區別是我添加node1childNode如下:

childNode.Add(new XElement(brk + "node1",123456)); 

此代碼,給定一個XmlWriterXDocument給我的輸出:

<?xml version="1.0" encoding="utf-8"?> 
<Root xmlns:brk="http://somewhere.com"> 
    <child1> 
    <brk:node1>123456</brk:node1> 
    </child1> 
</Root> 

使用XNamespace的詳情,請參閱MSDN

+0

好的耶茨,讓我們有一個男人擁抱,你只是在後面的腳,因爲你羨慕我的var使用情況。我不明白爲什麼你的工作,而不是我的?你能告訴我嗎? – Dan 2009-02-09 17:51:38

0

我相信這個問題是根元素必須有命名空間,以及:

XElement root = new XElement("Root", 
    new XAttribute(XNamespace.Xmlns + "brk", "http://somewhere.com")); 

需求是:

XElement root = new XElement(brk + "Root", 
    new XAttribute(XNamespace.Xmlns + "brk", "http://somewhere.com")); 
0

這是solotuion和工作的罰款。

using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Linq; 
    using System.Text; 
    using System.Windows.Forms; 
    using System.Xml; 
    using System.Xml.Linq; 
    using System.Xml.XPath; 
    using System.Xml.Serialization; 

    namespace CreateSampleXML 
    { 
     public partial class Form1 : Form 
     { 
      public Form1() 
      { 
       InitializeComponent();    
       XNamespace xm = "http://somewhere.com"; 
       XElement rt= new XElement("Root", new XAttribute(XNamespace.Xmlns + "brk", "http://somewhere.com")); 
       XElement cNode = new XElement("child1"); 
       cNode.Add(new XElement(xm + "node1", 123456)); 
       cNode.Add(new XElement(xm + "node2", 500000000)); 
       rt.Add(cNode); 
       XDocument doc2 = new XDocument(rt); 
       doc2.Save(@"C:\sample3.xml"); 
      } 
     }  
    }