在将名称空间添加到根目录时遇到了问题。有点像这样:
<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时,它将此名称空间添加到根**的所有子名称空间如何解决这个问题…**我在这个xml中有多个标签,这些标签有多个子标签,他们的孩子也有多个孩子。我找到了一个解决方案,添加名称空间的孩子,然后名称空间添加到他们的子孩子了。有没有办法消除或防止这个…
递归呢?
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));
}