我在将命名空间添加到root时遇到了问题..有点根需要是这样的:
<railml version="2.0"
xmlns="http://www.railml.org/schemas/2009"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.railml.org/schemas/2009 http://www.railml.org/schemas/2009/railML-2.0/railML.xsd">
我试着像
一样解决自己XNamespace xmlns = "http://www.railml.org/schemas/2009";
var doc = new XDocument();
XElement root = new XElement(xmlns+"railml");
doc.Add(root);
XAttribute ver = new XAttribute("version", "2.0");
root.Add(ver);
XNamespace ds = "http://purl.org/dc/elements/1.1/";
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
XNamespace schemaLocation = "http://www.railml.org/schemas/2009 http://www.railml.org/schemas/2009/railML-2.0/railML.xsd";
XAttribute x2 = new XAttribute(XNamespace.Xmlns + "dc", ds.NamespaceName);
XAttribute x3 = new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName);
XAttribute x4 = new XAttribute(xsi + "schemaLocation", schemaLocation.NamespaceName);
root.Add(x2);
root.Add(x3);
root.Add(x4);
命名空间正在添加,但问题是,在添加xmlns时,它会将此命名空间添加到root **的所有子节点 如何解决这个问题.. **我在这个xml中有多个标签,这些标签有多个子标签,他们的孩子也有多个孩子.. 我找到了一个向child添加名称空间的解决方案,但是namspace也添加了它们的子子.. 有没有办法删除或阻止这个..
答案 0 :(得分:3)
递归怎么样?
private static XElement AddNamespace(XElement element, XNamespace ns)
{
return
new XElement(
ns + element.Name.LocalName,
element.Attributes(),
element.Elements().Select(x => AddNamespace(x, ns)));
}
为元素和所有后代元素添加命名空间。将其应用于XDocument.Root
可以为您提供添加到所有元素的命名空间的整个新文档。
static void Main(string[] args)
{
var xDoc = XDocument.Load("Input.xml");
var ns = "http://my-namespace.com";
var newDoc = new XDocument(AddNamespace(xDoc.Root, ns));
}