C# 读取xml中特定节点的属性值 xmldocument方式 【有些乱,但有思路】

来源:互联网 发布:矩阵特征值与稳定性 编辑:程序博客网 时间:2024/05/16 05:29


下面这个xml 文件,要找的路径是"WTTData"Component"ComponentData"ComponentData"ObjectQueryBuilder 找属性field为datastore的expression节点的value值.

<WTTData>
     <Component SetName="Explorers" GroupName="JobExplorer">
       <ComponentData Name="JobExplorer" Version="2.2.2098.0">
         <ComponentData Name="HorzSplitter" Version="2.2.2098.0">
           <Data Position="185" />
         </ComponentData>
         <ComponentData Name="VertSplitter" Version="2.2.2098.0">
           <Data Position="150" />
         </ComponentData>
         <ComponentData Name="TabbedObjectTreeControl" Version="2.2.2098.0" Visible="True">
           <Data SelectedTreeNodePath="$" CurrentTab="0" />
         </ComponentData>
         <ComponentData Name="ConfigurableListControl" Version="2.2.2098.0">
           <Column Name="" Width="32" SortIndex="0" SortOrder="None" ColumnOrder="0" Default="True" />
           <Column Name="Id" Width="70" SortIndex="-1" SortOrder="None" ColumnOrder="1" Default="True" />
           <Column Name="Name" Width="352" SortIndex="-1" SortOrder="None" ColumnOrder="2" Default="True" />
           <Column Name="AssignedToAlias" Width="80" SortIndex="-1" SortOrder="None" ColumnOrder="3" Default="True" />
           <Column Name="FullPath" Width="190" SortIndex="-1" SortOrder="None" ColumnOrder="4" Default="True" />
           <Column Name="LastUpdatedTime" Width="150" SortIndex="1" SortOrder="Descending" ColumnOrder="5" Default="True" />
         </ComponentData>
         <ComponentData Name="QueryBuilder" Version="2.2.2098.0" Visible="True">
           <ObjectQueryBuilder ControlType="Microsoft.DistributedAutomation.UI.QueryBuilder" ControlAssembly="Microsoft.WTT.UI.Controls.ObjectControls" Assembly="WTTOMJobs" Type="Microsoft.DistributedAutomation.Jobs.Job" Title="Job Query">
             <Expression Index="1" Static="True" AttachWith="" Mapping="DataStore" Field="DataStore" Operator="Equals" Value="WTTMobile1" />
             <Expression AttachWith="And" Mapping="Id" Field="ID" Operator="Greater" Value="733454" />
             <Expression AttachWith="And" Mapping="Id" Field="ID" Operator="Less" Value="733740" />
           </ObjectQueryBuilder>
         </ComponentData>
         <ComponentData Name="ToolBar" Version="2.2.2098.0">
           <Data DefinitionController="WTTMobile1" HideQueryBuilder="True" HideHierarchy="True" MaxItemsToDisplay="500" />
         </ComponentData>
       </ComponentData>
     </Component>
     <ActiveComponent SetName="Explorers" GroupName="JobExplorer" />
</WTTData>

实现代码是:

{

{

xDoc.Load(filename);

xElem1 = (

{

dataStoreString = xElem1.GetAttribute(

}

}

}

1,定义一个XmlDocument对象xDoc

2,通过XmlDocument来load需要读取的xml文件

3,通过XmlDocument的SelectSingleNode来找到节点,并把节点转换为XmlElement

4,XmlElement 可以对节点的属性进行操作

注意两点:

1,

其中xDoc.SelectSingleNode("descendant::Expression[@Field='DataStore']");

SelectSingleNode参数里带有过滤条件,匹配公式是

descendant::nodename[@attribute='attributevalue']

2,xElem1 = (XmlElement)xDoc.SelectSingleNode("descendant::Expression[@Field='DataStore']");把XmlNode强制转为XmlElement,理由是XmlElement是XmlNode的子类,前者比后者提供更多好用的方法,比如属性的读和写.XmlNode除了可以转为XmlAttribute.

public static string getDataStore(string filename)

{

string dataStoreString =string.Empty;

if (!string.IsNullOrEmpty(filename))

 {

   XmlDocument xDoc =newXmlDocument();

   XmlElement xElem1;

  xElem1=(XmlElement)xDoc.SelectSingleNode("descendant::Expression[@Field='DataStore']");

   if (xElem1 !=null)"Value");

}

 return dataStoreString;

}

0 0
原创粉丝点击