C# 从Xml克隆节点并在其他地方使用它,而无需Xml NS验证
我正在尝试从Xml文件加载结构,以便在其他地方重建它。 大多数部分已经被解析并加载到对象中。但有些部分是无用的,不会被更改,所以我决定将这些节点放在它们的层次结构中,并将节点及其decentant作为字符串保留 稍后,我应该能够从该字符串生成一个XmlElement或XmlFragment,并将其重新附加到正在生成的xml文件中 到目前为止,装载部分还不错。我可以复制所选部件并将其作为XmlNode保存。但要重新附加它,我必须将它转换为xmlElement,这就是CustomXmlNamespaces破坏一切的地方。名称空间加载在完整的xml文档中,但当我获取文件片段时,它显然不包含名称空间 当我想加载片段字符串时,它会提示我 System.Xml.XmlException:“mxswa”是未声明的前缀。第1行, 位置2。” 因此,xml字符串类似于:C# 从Xml克隆节点并在其他地方使用它,而无需Xml NS验证,c#,xml,xml-parsing,xml-namespaces,C#,Xml,Xml Parsing,Xml Namespaces,我正在尝试从Xml文件加载结构,以便在其他地方重建它。 大多数部分已经被解析并加载到对象中。但有些部分是无用的,不会被更改,所以我决定将这些节点放在它们的层次结构中,并将节点及其decentant作为字符串保留 稍后,我应该能够从该字符串生成一个XmlElement或XmlFragment,并将其重新附加到正在生成的xml文件中 到目前为止,装载部分还不错。我可以复制所选部件并将其作为XmlNode保存。但要重新附加它,我必须将它转换为xmlElement,这就是CustomXmlNamespa
<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);
}