C# 读取xml中特定节点的属性值 xmldocument方式

2007-06-08 17:55

下面这个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.

staticpublicstring getDataStore(string filename)string dataStoreString = string.Empty;if (!string.IsNullOrEmpty(filename))XmlDocument xDoc = newXmlDocument();XmlElement xElem1;XmlElement)xDoc.SelectSingleNode("descendant::Expression[@Field='DataStore']");if (xElem1 != null)"Value");return dataStoreString;