[英]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.