簡體   English   中英

如何將xmlns屬性添加到現有的xml文檔

[英]how to add xmlns attribute to an existing xml document

我有現有的xml文檔。

例如

<Test>
  <A />
</Test>

我將此xml加載到XDocument中。 我需要將屬性xmlns添加到此文檔並使用此屬性保存它。

var xml = new XDocument.Load("c:\\filePath.xml");

我在嘗試這個時:

xml.Root.SetAttributeValue("xmlns", "http://namespaceuri");

我得到例外:

System.Xml.XmlException: The prefix '' cannot be redefined from 'http://namespaceuri' to  within the same start element tag.

謝謝

您還需要將名稱設置為在名稱空間中:

XNamespace ns = "http://namespaceuri";
foreach (var element in xml.Descendants().ToList())
{
    element.Name = ns + element.Name.LocalName;
}
xml.Root.SetAttributeValue("xmlns", ns.ToString());

基本上,您正在嘗試將所有元素移動到該命名空間, 使其成為根元素的默認命名空間。 您不能更改默認命名空間,同時將元素本身保留在不同但不合格的命名空間中。

將上面的代碼與示例XML(固定為A結束)一起使用將導致:

<Test xmlns="http://namespaceuri">
  <A />
</Test>

請注意,此代碼將更改所有元素的命名空間。 如果您希望更具選擇性,則應在xml.Descendants()調用之后添加Where調用,例如

foreach (var element in xml.Descendants()
                           .Where(x => x.Name.Namespace == XNamespace.None)
                           .ToList())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM