【问题标题】:LINQ to XML - Load node then add to Xdocument - Namespace issueLINQ to XML - 加载节点然后添加到 Xdocument - 命名空间问题
【发布时间】:2016-06-10 16:18:19
【问题描述】:

我在加载后添加继承父命名空间的 XElement 时遇到严重问题...我尝试了多个示例,在两个文档中设置完全相同的命名空间,尝试删除命名空间...老实说,这是一团糟,我发现的唯一示例是在构造函数中使用命名空间重新创建 XElement 对象,但我的 XML 非常庞大。我不希望这样做。有没有办法在加载后继承命名空间然后添加到父级(参见代码示例)。

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">

如果我删除该属性,那么我会让所有孩子都搞砸并收到愚蠢的 xlmns="" :(

【问题讨论】:

  • 尝试定义 XNamespace 'ns = "..";'并用元素'selectNode.Add(ns + element);'添加它
  • 我喜欢使用以下内容:xml.Descendants().Where(x => x.Name.LocalName == "AssumeLotsOfChilds")。不需要命名空间。

标签: c# .net xml linq xml-namespaces


【解决方案1】:

您的“从单独文件加载的元素”和子项没有命名空间,因此在将它们插入到具有不同默认命名空间的文档中时会添加 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);

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多