c# – XElement仅添加前缀

我有一个 XML文件,如:
<myPrefix:Catalog xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
 xmlns:sys="clr-namespace:System;assembly=mscorlib" 
 xmlns:myPrefix="clr-namespace:........">

  <myPrefix:Item Name="Item1" Mode="All" />
  <myPrefix:Item Name="Item2" Mode="Single" />

</myPrefix:Catalog>

使用C#我创建一个新项目,如:

XContainer container = XElement.Parse(xml);
XElement xmlTree = 
   new XElement("Item",new XAttribute("Name",item.Name),new XAttribute("Mode",item.Mode));

如您所见,我不添加“myPrefix”前缀.谁能告诉我怎么做到这一点?我不想再声明xmlns.谢谢,彼得

解决方法

编辑1:
如果您将namespace属性以及元素添加到元素中,则会强制它添加前缀.但是您仍然在节点中使用xmlns属性.要删除它,您可能正如杰夫所说,需要使用XmlWriter.

编辑2:
要获得您想要的EXACT XML,您还需要创建根元素:

编辑3:
好.我找到了一种在没有XmlWriter的情况下获得所需内容方法

var xml = "<myPrefix:Catalog xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:sys=\"clr-namespace:System;assembly=mscorlib\" xmlns:myPrefix=\"clr-namespace:........\"><myPrefix:Item Name=\"Item1\" Mode=\"All\" /></myPrefix:Catalog>";

XNamespace presentation = "http://schemas.microsoft.com/winfx/2006/xaml/presentation";
XNamespace xaml = "http://schemas.microsoft.com/winfx/2006/xaml";
XNamespace mscorlib = "clr-namespace:System;assembly=mscorlib";
XNamespace myPrefix = "clr-namespace:.......";

XElement container = XElement.Parse(xml);

var xmlTree = new XElement("Item","Item2"),"Single"));

container.Add(xmlTree);

foreach (var el in container.DescendantsAndSelf())
{
  el.Name = myPrefix.GetName(el.Name.LocalName);
  var atList = el.Attributes().ToList();
  el.Attributes().Remove();
  foreach (var at in atList)
  {
    if (el.Name.LocalName == "Catalog" && at.Name.LocalName != "xmlns")
      continue;
    el.Add(new XAttribute(at.Name.LocalName,at.Value));
  }
}

container.Add(new XAttribute(XNamespace.Xmlns + "x",xaml));
container.Add(new XAttribute(XNamespace.Xmlns + "sys",mscorlib));
container.Add(new XAttribute(XNamespace.Xmlns + "myPrefix",myPrefix));

编辑4:显然有一种更简单的方法…更容易…看到其他答案.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...