2016-12-14 40 views
3

問題更新XML:如果我的問題是不明確的即時通訊很抱歉如何添加命名空間使用LINQ XML

這裏使用的是現在

XDocument doc = XDocument.Parse(framedoc.ToString()); 
foreach (var node in doc.Descendants("document").ToList()) 
{ 
    XNamespace ns = "xsi"; 
    node.SetAttributeValue(ns + "schema", ""); 
    node.Name = "alto"; 
} 

代碼IM這裏是輸出

<alto p1:schema="" xmlns:p1="xsi"> 

我的目標是這樣的

xsi:schemaLocation="" 

p1xmlns:p1="xsi"從哪裏來?

+2

可能的[XElement命名空間(如何?)]重複(http:// s tackoverflow.com/questions/4985974/xelement-namespaces-how-to) – CSharpie

+0

@CSharpie好心看看最新的問題,爲什麼它會給我錯誤的輸出?謝謝 –

+0

該輸出的哪一位是「錯誤的」?請在問題中突出顯示它,理想情況下將輸出分成多行,以便更易於閱讀。 (如果你可以簡化這個以減少可能的位數,這也會有幫助。) –

回答

3

當你寫

XNamespace ns = "xsi"; 

這是創建僅 「XSI」 的URI的XNamespace。這不是你想要的。你需要一個命名空間別名xsi ...與適當的URI通過xmlns屬性。所以,你想:

XDocument doc = XDocument.Parse(framedoc.ToString()); 
foreach (var node in doc.Descendants("document").ToList()) 
{ 
    XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance"; 
    node.SetAttributeValue(XNamespace.Xmnls + "xsi", ns.NamespaceName); 
    node.SetAttributeValue(ns + "schema", ""); 
    node.Name = "alto"; 
} 

或者更好的,只是設定在根元素別名:

XDocument doc = XDocument.Parse(framedoc.ToString()); 
XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance"; 
doc.Root.SetAttributeValue(XNamespace.Xmlns + "xsi", ns.NamespaceName); 
foreach (var node in doc.Descendants("document").ToList()) 
{ 
    node.SetAttributeValue(ns + "schema", ""); 
    node.Name = "alto"; 
} 

樣品創建文檔:

using System; 
using System.Xml.Linq; 

public class Test 
{ 
    static void Main() 
    { 
     XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance"; 
     XDocument doc = new XDocument(
      new XElement("root", 
       new XAttribute(XNamespace.Xmlns + "xsi", ns.NamespaceName), 
       new XElement("element1", new XAttribute(ns + "schema", "s1")), 
       new XElement("element2", new XAttribute(ns + "schema", "s2")) 
      )       
     ); 
     Console.WriteLine(doc); 
    } 
} 

輸出:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <element1 xsi:schema="s1" /> 
    <element2 xsi:schema="s2" /> 
</root>