[英]Parse XAML using XDocument class C#
我正在嘗試使用XDocument類獲取工作流標簽,但是下面提到的異常給了我:
名稱中不能包含':'字符,十六進制值0x3A。
我也嘗試過使用命名空間,但沒有取得積極的結果。
XML:
<?xml version="1.0" encoding="utf-16"?>
<Activity x:Class="XrmWorkflow75328ae32924499d972dd68053611740" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:mxswa="clr-namespace:Microsoft.Xrm.Sdk.Workflow.Activities;assembly=Microsoft.Xrm.Sdk.Workflow, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" xmlns:s="clr-namespace:System;assembly=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" xmlns:this="clr-namespace:" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<mxswa:Workflow>
<mxswa:ActivityReference AssemblyQualifiedName="Microsoft.Crm.Workflow.Activities.ConditionSequence, Microsoft.Crm.Workflow, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" DisplayName="ConditionStep1: name">
</mxswa:ActivityReference>
</mxswa:Workflow>
</Activity>
代碼:
string strXml = File.ReadAllText(@"../../XMLFile1.xml");
XDocument xdoc = XDocument.Parse(strXml);
XNamespace xmlns = "clr-namespace:Microsoft.Xrm.Sdk.Workflow.Activities;assembly=Microsoft.Xrm.Sdk.Workflow, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35";
var results = from node in xdoc.Descendants( xmlns + "Workflow")
select node;
結果始終為null。
這是在元素名稱中使用名稱空間的正確方法:
xdoc.Descendants(xmlns + "ActivityReference.Arguments")
即其XNamespace
加上本地名稱字符串。
注意:示例xml中沒有mxswa:ActivityReference.Arguments
節點,並且mxswa:ActivityReference
沒有結束標記。
我正在嘗試獲取工作流程標簽
正如@Sergey Berezovskiy提到的那樣,您需要使用XNamespace
。
這是完整的工作示例。
var xml = @"<?xml version=""1.0"" encoding=""utf-16""?>
<Activity x:Class=""XrmWorkflow75328ae32924499d972dd68053611740"" xmlns=""http://schemas.microsoft.com/netfx/2009/xaml/activities"" xmlns:mxswa=""clr-namespace:Microsoft.Xrm.Sdk.Workflow.Activities;assembly=Microsoft.Xrm.Sdk.Workflow, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"" xmlns:s=""clr-namespace:System;assembly=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"" xmlns:this=""clr-namespace:"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
<mxswa:Workflow>
<mxswa:ActivityReference AssemblyQualifiedName=""Microsoft.Crm.Workflow.Activities.ConditionSequence, Microsoft.Crm.Workflow, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"" DisplayName=""ConditionStep1: name"" />
</mxswa:Workflow>
</Activity>";
XDocument xdoc = XDocument.Parse(xml);
XNamespace xnamespace = "clr-namespace:Microsoft.Xrm.Sdk.Workflow.Activities;assembly=Microsoft.Xrm.Sdk.Workflow, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35";
var nodes = xdoc.Descendants(xnamespace + "Workflow");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.