Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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文件无法选择节点_C#_.net_Xml_Parsing - Fatal编程技术网

C# 解析xml文件无法选择节点

C# 解析xml文件无法选择节点,c#,.net,xml,parsing,C#,.net,Xml,Parsing,我必须加载一个包含以下内容的xml文件我添加了root nood视图,因为我不知道xml文件不能有两个父对象,但无论我使用以下方法做什么,我都无法选择使该函数工作的路径。这是使用C#net 4 string text=System.IO.File.ReadAllText(@“XMLFile.XML”); XmlDocument currentDocument=新的XmlDocument(); 尝试 { currentDocument.LoadXml(文本); } 捕获(例外情况除外) { 掷骰子

我必须加载一个包含以下内容的xml文件我添加了root nood视图,因为我不知道xml文件不能有两个父对象,但无论我使用以下方法做什么,我都无法选择使该函数工作的路径。这是使用C#net 4

string text=System.IO.File.ReadAllText(@“XMLFile.XML”);
XmlDocument currentDocument=新的XmlDocument();
尝试
{
currentDocument.LoadXml(文本);
}
捕获(例外情况除外)
{
掷骰子;
}
string path=“查看/数据”;
XmlNodeList nodeList=currentDocument.SelectNodes(路径);
IDictionary keyValuePairList=新字典();
foreach(节点列表中的XmlNode节点)
{
foreach(node.ChildNodes中的XmlNode innerNode)
{
if(innerNode.Attributes!=null&&innerNode.Attributes.Count==2)
{
keyValuePairList.Add(新的KeyValuePair(innerNode.Attributes[0].Value,innerNode.Attributes[1].Value));
}
}
}
foreach(keyValuePairList中的KeyValuePair对)
{
WriteLine(string.Format(“{0}:{1}”,pair.Key,pair.Value));
}
Console.ReadLine();
Xml文件内容

<view>
 <Data>
    <Adapters>
      <Adapter AdapterName="dataportal:EnterpriseManagementObjectProjectionAdapter">
        <AdapterAssembly>Microsoft.EnterpriseManagement.UI.SdkDataAccess</AdapterAssembly>
        <AdapterType>Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.EnterpriseManagementObjectProjectionAdapter</AdapterType>
      </Adapter>
      <Adapter AdapterName="viewframework://Adapters/AdvancedList">
        <AdapterAssembly>Microsoft.EnterpriseManagement.UI.ViewFramework</AdapterAssembly>
        <AdapterType>Microsoft.EnterpriseManagement.UI.ViewFramework.AdvancedListSupportAdapter</AdapterType>
      </Adapter>
      <Adapter AdapterName="omsdk://Adapters/Criteria">
        <AdapterAssembly>Microsoft.EnterpriseManagement.UI.SdkDataAccess</AdapterAssembly>
        <AdapterType>Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.SdkCriteriaAdapter</AdapterType>
      </Adapter>
    </Adapters>
    <ItemsSource>
      <AdvancedListSupportClass xmlns="clr-namespace:Microsoft.EnterpriseManagement.UI.ViewFramework;assembly=Microsoft.EnterpriseManagement.UI.ViewFramework" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" DataTypeName="" AdapterName="viewframework://Adapters/AdvancedList" FullUpdateAdapter="dataportal:EnterpriseManagementObjectProjectionAdapter" DataSource="mom:ManagementGroup" IsRecurring="True" RecurrenceFrequency="{x:Static s:Int32.MaxValue}" FullUpdateFrequency="1" Streaming="true">
        <AdvancedListSupportClass.Parameters>
          <QueryParameter Parameter="TypeProjectionId" Value="$MPElement[Name='System.WorkItem.Incident.View.ProjectionType']$"/>
        </AdvancedListSupportClass.Parameters>
      </AdvancedListSupportClass>
    </ItemsSource>
    <Criteria>
      <QueryCriteria xmlns="http://tempuri.org/Criteria.xsd" Adapter="omsdk://Adapters/Criteria">
        <Criteria>
          <FreeformCriteria>
            <Freeform>
              <Criteria xmlns="http://Microsoft.EnterpriseManagement.Core.Criteria/">
                <Expression>
                  <And>
                    <Expression>
                      <SimpleExpression>
                        <ValueExpressionLeft>
                          <Property>$Context/Property[Type='CoreIncident!System.WorkItem.Incident']/TierQueue$</Property>
                        </ValueExpressionLeft>
                        <Operator>Equal</Operator>
                        <ValueExpressionRight>
                          <Value>$MPElement[Name="IncidentTierQueuesEnum.Tier2"]$</Value>
                        </ValueExpressionRight>
                      </SimpleExpression>
                    </Expression>
                    <Expression>
                      <SimpleExpression>
                        <ValueExpressionLeft>
                          <Property>$Context/Property[Type='CoreIncident!System.WorkItem.Incident']/Status$</Property>
                        </ValueExpressionLeft>
                        <Operator>NotEqual</Operator>
                        <ValueExpressionRight>
                          <Value>$MPElement[Name="CoreIncident!IncidentStatusEnum.Resolved"]$</Value>
                        </ValueExpressionRight>
                      </SimpleExpression>
                    </Expression>
                    <Expression>
                      <SimpleExpression>
                        <ValueExpressionLeft>
                          <Property>$Context/Property[Type='CoreIncident!System.WorkItem.Incident']/Status$</Property>
                        </ValueExpressionLeft>
                        <Operator>NotEqual</Operator>
                        <ValueExpressionRight>
                          <Value>$MPElement[Name="CoreIncident!IncidentStatusEnum.Closed"]$</Value>
                        </ValueExpressionRight>
                      </SimpleExpression>
                    </Expression>
                    <Expression>
                      <UnaryExpression>
                        <ValueExpression>
                          <GenericProperty Path="$Context/Path[Relationship='WorkItem!System.WorkItemAssignedToUser' SeedRole='Source']$">Id</GenericProperty>
                        </ValueExpression>
                        <Operator>IsNull</Operator>
                      </UnaryExpression>
                    </Expression>
                  </And>
                </Expression>
              </Criteria>
            </Freeform>
          </FreeformCriteria>
        </Criteria>
      </QueryCriteria>
    </Criteria>
  </Data>
    <Presentation>
    <Columns>
      <mux:ColumnCollection xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mux="http://schemas.microsoft.com/SystemCenter/Common/UI/Views/GridView" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:datebinding="clr-namespace:Microsoft.EnterpriseManagement.UI.Extensions;assembly=Microsoft.EnterpriseManagement.UI.Extensions">
        <mux:Column Name="id" DisplayMemberBinding="{Binding Path=Id, Mode=OneWay}" Width="150" DisplayName="Header_Id" Property="Id$ReturnValueAsBigInt$" DataType="s:String"/>
        <mux:Column Name="title" DisplayMemberBinding="{Binding Path=Title, Mode=OneWay}" Width="200" DisplayName="Header_Title" Property="Title" DataType="s:String"/>
        <mux:Column Name="sDisplayName" DisplayMemberBinding="{Binding Path=Status.DisplayName, Mode=OneWay}" Width="100" DisplayName="Header_Status" Property="Status.DisplayName" DataType="s:String"/>
        <mux:Column Name="priority" DisplayMemberBinding="{Binding Path=Priority, Mode=OneWay}" Width="100" DisplayName="Header_Priority" Property="Priority" DataType="s:Int32"/>
        <mux:Column Name="targetTime" DisplayMemberBinding="{datebinding:DateBinding Path=TargetResolutionTime, Mode=OneWay}" Width="100" DisplayName="Header_Target_Resolution_Time" Property="TargetResolutionTime" DataType="s:DateTime"/>
        <mux:Column Name="aDisplayName" DisplayMemberBinding="{Binding Path=AffectedUser.DisplayName, Mode=OneWay}" Width="150" DisplayName="Header_Affected_User" Property="AffectedUser.DisplayName" DataType="s:String"/>
        <mux:Column Name="lastModified" DisplayMemberBinding="{Binding Path=$LastModified$, Mode=OneWay}" Width="150" DisplayName="Header_Last_Modified" Property="$LastModified$" DataType="s:DateTime"/>
      </mux:ColumnCollection>
    </Columns>
    <ViewStrings>
      <ViewString ID="Header_Id">$MPElement[Name="System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header_Id"]$</ViewString>
      <ViewString ID="Header_Title">$MPElement[Name="System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header_Title"]$</ViewString>
      <ViewString ID="Header_Status">$MPElement[Name="System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header_Status"]$</ViewString>
      <ViewString ID="Header_Priority">$MPElement[Name="System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header_Priority"]$</ViewString>
      <ViewString ID="Header_Target_Resolution_Time">$MPElement[Name="System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header_Target_Resolution_Time"]$</ViewString>
      <ViewString ID="Header_Affected_User">$MPElement[Name="System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header_Affected_User"]$</ViewString>
      <ViewString ID="Header_Last_Modified">$MPElement[Name="System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header_Last_Modified"]$</ViewString>
    </ViewStrings>
  </Presentation>
</view>

Microsoft.EnterpriseManagement.UI.SdkDataAccess
Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.EnterpriseManagementObjectProjectOnAdapter
Microsoft.EnterpriseManagement.UI.ViewFramework
Microsoft.EnterpriseManagement.UI.ViewFramework.AdvancedListSupportAdapter
Microsoft.EnterpriseManagement.UI.SdkDataAccess
Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.SdkCriteriaAdapter
$Context/Property[Type='CoreIncident!System.WorkItem.Incident']/TierQueue$
相等的
$MPElement[Name=“incidentierqueuesenum.Tier2”]$
$Context/Property[Type='CoreIncident!System.WorkItem.Incident']/Status$
诺特奎尔
$MPElement[Name=“CoreIncident!IncidentStatusEnum.Resolved”]$
$Context/Property[Type='CoreIncident!System.WorkItem.Incident']/Status$
诺特奎尔
$MPElement[Name=“CoreIncident!IncidentStatusEnum.Closed”]$
身份证件
IsNull
$MPElement[Name=“System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header\u Id”]$
$MPElement[Name=“System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header\u Title”]$
$MPElement[Name=“System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header_Status”]$
$MPElement[Name=“System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header\u Priority”]$
$MPElement[Name=“System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header\u Target\u Resolution\u Time”]$
$MPElement[Name=“System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header\u Infected\u User”]$
$MPElement[Name=“System.WorkItem.Incident.Queue.Tier2.Unassigned.View.Header\u Last\u Modified”]$

您忘记了路径中的第一个斜杠:

string path = "/View/Data";
第一条斜线表示绝对路径。如果省略它,则表示“基于当前匹配的节点选择
查看/数据
”,与
/View/Data
相同。但由于此时未选择任何节点,因此它不会返回任何内容

要返回所有数据节点,可以使用
/
子代选择器:

"//Data"
要选择除根元素以外的所有元素,请结合使用
*

"//*"

只需在路径中添加
/
,即可使其成为绝对路径

string text = System.IO.File.ReadAllText(@"XMLFile.XML");

            XmlDocument currentDocument = new XmlDocument();
            try
            {
                currentDocument.LoadXml(text);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            string path = "//*"; // retieve all data
            XmlNodeList nodeList = currentDocument.SelectNodes(path);
            IDictionary<string, string> keyValuePairList = new Dictionary<string, string>();
            foreach (XmlNode node in nodeList)
            {
                foreach (XmlNode innerNode in node.ChildNodes)
                {
                    if (innerNode.Attributes != null && innerNode.Attributes.Count == 2)
                    {
                        keyValuePairList.Add(new KeyValuePair<string, string>(innerNode.Attributes[0].Value, innerNode.Attributes[1].Value));
                    }
                }
            }
            foreach (KeyValuePair<string, string> pair in keyValuePairList)
            {
                Console.WriteLine(string.Format("{0} : {1}", pair.Key, pair.Value));
            }
            Console.ReadLine();
string text=System.IO.File.ReadAllText(@“XMLFile.XML”);
XmlDocument currentDocument=新的XmlDocument();
尝试
{
currentDocument.LoadXml(文本);
}
捕获(例外情况除外)
{
掷骰子;
}
字符串路径=“//*”;//重新筛选所有数据
XmlNodeList nodeList=currentDocument.SelectNodes(路径);
IDictionary keyValuePairList=新字典();
foreach(节点列表中的XmlNode节点)
{
foreach(node.ChildNodes中的XmlNode innerNode)
{
if(innerNode.Attributes!=null&&innerNode.Attributes.Count==2)
{
keyValuePairList.Add(新的KeyValuePair(innerNode.Attributes[0].Value,innerNode.Attributes[1].Value));
}
}
}
foreach(keyValuePairList中的KeyValuePair对)
string text = System.IO.File.ReadAllText(@"XMLFile.XML");

            XmlDocument currentDocument = new XmlDocument();
            try
            {
                currentDocument.LoadXml(text);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            string path = "//*"; // retieve all data
            XmlNodeList nodeList = currentDocument.SelectNodes(path);
            IDictionary<string, string> keyValuePairList = new Dictionary<string, string>();
            foreach (XmlNode node in nodeList)
            {
                foreach (XmlNode innerNode in node.ChildNodes)
                {
                    if (innerNode.Attributes != null && innerNode.Attributes.Count == 2)
                    {
                        keyValuePairList.Add(new KeyValuePair<string, string>(innerNode.Attributes[0].Value, innerNode.Attributes[1].Value));
                    }
                }
            }
            foreach (KeyValuePair<string, string> pair in keyValuePairList)
            {
                Console.WriteLine(string.Format("{0} : {1}", pair.Key, pair.Value));
            }
            Console.ReadLine();