我正在尝试从Xml文件加载结构,以便我可以在其他地方重建它。 大多数零件已经过解析并加载到对象中。但是有些部分是无用的,并且没有被改变,所以我决定将这些节点放在它们的Hierarchy中并获取Node及其后代并将它们保持为字符串。
稍后我应该能够从该字符串创建一个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>
加载代码是这样的:
XmlDocumentFragment fragment = doc.CreateDocumentFragment();
fragment.InnerXml = xmlString;
arguments.AppendChild(fragment);
答案 0 :(得分:0)
好的,我似乎已经开始工作了。
当我到处搜索时,几乎无论如何都可能。
我终于通过使用一个根本没有查看命名空间的工具来完成工作。
我使用HtmlAgilityPack解析并重新创建xml,它就像一个魅力!
这里的代码是它如何做到的神奇之处!
Arguments = xmlNode.Descendants().FirstOrDefault();
if(Arguments != null)
{
HtmlNode arguments = doc.CreateElement(XamlNodeType.GetXamlElementName() + ".Arguments");
arguments.AppendChild(XmlFragment);
el.AppendChild(arguments);
}