LINQ to XML - 加载节点然后添加到 Xdocument - 命名空间问题
LINQ to XML - Load node then add to Xdocument - Namespace issue
我在加载后添加继承 parent 命名空间的 XElement 时遇到严重问题...我尝试了多个示例,在两个文档中设置了完全相同的命名空间,并尝试删除命名空间。 .. 这真是一团糟,我发现的唯一例子是 re-creating XElement object 在构造函数中有一个命名空间,但我的 XML 非常庞大。我不想这样做。有没有一种方法可以在加载后继承命名空间然后添加到 parent(请参阅代码以了解我的意思)。
xml = XDocument.Load(rdlFile);
var selectNode = xml.AssumeISelectedTheNodeIWantWithLinq();
//A static element loaded from a separate file
XElement elementNeedsNameSpace = XElement.Load("element.xml");
selectNode.Add(elementNeedsNameSpace );
//Output xml:
<MyAddedNode xmlns="">
<AssumeLotsOfChilds>
<SubChilds/>
</AssumeLotsOfChilds>
</MyAddedNode>
//Root xml
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
如果我删除该属性,那么我会把所有 children 搞砸并收到愚蠢的 xlmns="" :(
您的 'element loaded from a separate file' 和子项没有命名空间,因此在将它们插入到具有不同默认命名空间的文档中时会添加 xmlns=""
。
如果您想删除该属性,则需要更改所有元素名称以使用您要将其插入的文档的默认名称空间:
XNamespace ns = "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"
foreach (var element in elementNeedsNamespace.DescendantsAndSelf())
{
element.Name = ns + element.Name.LocalName;
}
selectNode.Add(elementNeedsNameSpace);
我在加载后添加继承 parent 命名空间的 XElement 时遇到严重问题...我尝试了多个示例,在两个文档中设置了完全相同的命名空间,并尝试删除命名空间。 .. 这真是一团糟,我发现的唯一例子是 re-creating XElement object 在构造函数中有一个命名空间,但我的 XML 非常庞大。我不想这样做。有没有一种方法可以在加载后继承命名空间然后添加到 parent(请参阅代码以了解我的意思)。
xml = XDocument.Load(rdlFile);
var selectNode = xml.AssumeISelectedTheNodeIWantWithLinq();
//A static element loaded from a separate file
XElement elementNeedsNameSpace = XElement.Load("element.xml");
selectNode.Add(elementNeedsNameSpace );
//Output xml:
<MyAddedNode xmlns="">
<AssumeLotsOfChilds>
<SubChilds/>
</AssumeLotsOfChilds>
</MyAddedNode>
//Root xml
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
如果我删除该属性,那么我会把所有 children 搞砸并收到愚蠢的 xlmns="" :(
您的 'element loaded from a separate file' 和子项没有命名空间,因此在将它们插入到具有不同默认命名空间的文档中时会添加 xmlns=""
。
如果您想删除该属性,则需要更改所有元素名称以使用您要将其插入的文档的默认名称空间:
XNamespace ns = "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"
foreach (var element in elementNeedsNamespace.DescendantsAndSelf())
{
element.Name = ns + element.Name.LocalName;
}
selectNode.Add(elementNeedsNameSpace);