2012-11-13 62 views
1

我試過在MSDN,W3Schools和其他網站上查找這個,沒有人似乎有答案。這是我的問題:需要幫助編寫C#中的XML開始元素#

我想爲XML文檔生成一個開始元素。我需要創建的特定元素是這樣的:

<ns1:getRecordsResponse xmlns:ns1="http://someurl/schemas"> 

基於我已經做了研究,我已經能夠得到使用此代碼正確生成該元素的下半場:

writer.WriteAttributeString("xmlns", "ns1", null, "http://someurl/schemas"); 

儘管如此,我無法得到正確生成的第一部分。我已經嘗試使用writer.StartElement(「ns1」,「getRecordsResponse」),同一行但名稱顛倒,我嘗試在三個點中的每一箇中添加null作爲第三個參數,並且它永遠不會出現正確。我也試着使用WriteElementString的方法,但我不能做正確的是因爲它拋出無效運算異常:

writer.WriteElementString("ns1", "getCitationsResponse", "http://someurl/schemas", null); 

我怎樣才能元素正確寫入?

+1

你真的需要用'XmlWriter'來開始嗎?如果你能以LINQ to XML的方式構建你的文檔,那麼你的生活可能會簡單得多... –

+0

我想,研究中的新東西。我正在做的是從Web服務響應中獲取信息並將其直接放入XML中。如果LINQ to XML可以做到這一點比這更容易,那麼很好。如果你有什麼很好的資源來幫助我解決這個問題,我會很感激。 – Ant

+1

是的,LINQ to XML將*絕對*讓你這樣做。在MSDN上搜索LINQ to XML,我相信你會找到一個好的起點。 –

回答

2

這似乎做你想要什麼:

using System; 
using System.Xml; 

class Test 
{ 
    public static void Main(string[] args) 
    { 
     using (var writer = XmlWriter.Create(Console.Out)) 
     { 
      writer.WriteStartElement("ns1", "foo", "http://someurl/schemas"); 
      writer.WriteAttributeString("xmlns", "ns1", null, "http://someurl/schemas"); 
      writer.WriteEndElement(); 
     } 
    } 
} 

輸出(而忽略了XML聲明):

<ns1:foo xmlns:ns1="http://someurl/schemas" /> 

望着documentation for that overload of WriteStartElement應該清楚爲什麼這樣的作品,因爲這些都是參數依次爲:

  • 前綴
    類型:System.String
    元素的名稱空間前綴。
  • localName
    類型:System.String
    元素的本地名稱。
  • ns
    類型:System.String
    要與該元素關聯的名稱空間URI。
+0

謝謝。我已經把命名空間URI放在那裏,並且認爲在WriteAttributeString方法調用中出現它並導致錯誤,這讓我感到困惑。我猜XML比我聰明一點。 – Ant