Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Xml克隆节点并在其他地方使用它,而无需Xml NS验证_C#_Xml_Xml Parsing_Xml Namespaces - Fatal编程技术网

C# 从Xml克隆节点并在其他地方使用它,而无需Xml NS验证

C# 从Xml克隆节点并在其他地方使用它,而无需Xml NS验证,c#,xml,xml-parsing,xml-namespaces,C#,Xml,Xml Parsing,Xml Namespaces,我正在尝试从Xml文件加载结构,以便在其他地方重建它。 大多数部分已经被解析并加载到对象中。但有些部分是无用的,不会被更改,所以我决定将这些节点放在它们的层次结构中,并将节点及其decentant作为字符串保留 稍后,我应该能够从该字符串生成一个XmlElement或XmlFragment,并将其重新附加到正在生成的xml文件中 到目前为止,装载部分还不错。我可以复制所选部件并将其作为XmlNode保存。但要重新附加它,我必须将它转换为xmlElement,这就是CustomXmlNamespa

我正在尝试从Xml文件加载结构,以便在其他地方重建它。 大多数部分已经被解析并加载到对象中。但有些部分是无用的,不会被更改,所以我决定将这些节点放在它们的层次结构中,并将节点及其decentant作为字符串保留

稍后,我应该能够从该字符串生成一个XmlElement或XmlFragment,并将其重新附加到正在生成的xml文件中

到目前为止,装载部分还不错。我可以复制所选部件并将其作为XmlNode保存。但要重新附加它,我必须将它转换为xmlElement,这就是CustomXmlNamespaces破坏一切的地方。名称空间加载在完整的xml文档中,但当我获取文件片段时,它显然不包含名称空间

当我想加载片段字符串时,它会提示我

System.Xml.XmlException:“mxswa”是未声明的前缀。第1行, 位置2。”

因此,xml字符串类似于:

<mxswa:Workflow.Variables>
  <Variable x:TypeArguments="scg:Dictionary(x:String, mcw:InteractionActivityResult)" Default="[New Dictionary(Of System.String, Microsoft.Crm.Workflow.InteractionActivityResult)]" Name="InteractionResponses" />
  <Variable x:TypeArguments="scg:Dictionary(x:String, mxs:EntityCollection)" Default="[New Dictionary(Of System.String, Microsoft.Xrm.Sdk.EntityCollection)]" Name="QueryResults" />
</mxswa:Workflow.Variables>

好的,我好像已经开始工作了

因为我到处都找,而且几乎无论如何都有可能

我最终通过使用一个根本不查看名称空间的工具使t工作

我使用HtmlAgilityPack解析和重新创建xml,它工作得非常出色

这里的代码是如何做到这一点的魔法

Arguments = xmlNode.Descendants().FirstOrDefault();
            if(Arguments != null)
        {
            HtmlNode arguments = doc.CreateElement(XamlNodeType.GetXamlElementName() + ".Arguments");

            arguments.AppendChild(XmlFragment);
            el.AppendChild(arguments);

        }

问题在于xmlString变量不是有效的xml。它不包含名称空间。当然xmlString不包含名称空间,它是xmldocument中间的一个片段。我希望它能以中间的方式被克隆。这取决于如何从父节点中提取XML,如果它包含命名空间。
Arguments = xmlNode.Descendants().FirstOrDefault();
            if(Arguments != null)
        {
            HtmlNode arguments = doc.CreateElement(XamlNodeType.GetXamlElementName() + ".Arguments");

            arguments.AppendChild(XmlFragment);
            el.AppendChild(arguments);

        }