在项目中第一次用xmldocument,刚用起来还有点晕,下面是自己的一些见解,呵呵
原来都是用 datatable来进行数据筛选的,select() ,这次项目中用xmldoucment
XmlElement elementHotel = xmlHotelInfo.DocumentElement;//得到首节点后的所有节点元素;
XmlNode nodeHotel = elementHotel.ChildNodes.Item( 0 );//得到第一个节点
nodeHotel.SelectNodes("//HotelId")[0].InnerText//在节点中搜索 节点名为 HoelId的第一个节点的innerText
SelectNodes("//HotelId/HotelRoom")和SelectNodes("//HotelRoom")的区别是,//HoelId//HotelRoom搜索HotelId节点下的HotelRoom。而//HotelRoom是搜索所有节点的//HotelRoom。
selectNodes( "//HotelId")[0] == selectNodes( "//HotelId").Item( 0 )
elementHotel.SelectNodes("descendant::HotelRoom[HotelId = " + HotelId + "]");//搜索节点HotelRoom下,节点为HoelId且innerText = HotelId 的节点集合。
注意:InnerText ,InnerXml, OutXml的区别。
//在集合中搜索节点数据
foreach ( XmlNode PriceNode in xmlDocPrice.SelectNodes("//TotalPrice") )
{
if ( isFisrt )
{
dMinPrcie = Convert.ToDecimal( PriceNode.InnerText );
strPriceUnion = PriceNode.NextSibling.InnerText;
isFisrt = false;
}
else if (dMinPrcie > Convert.ToDecimal(PriceNode.InnerText))
{
dMinPrcie = Convert.ToDecimal( PriceNode.InnerText );
strPriceUnion = PriceNode.NextSibling.InnerText;//这样是正确的
//如果: strPriceUnion = PriceNode.SelectNodes("//PriceUnit")[0].InnerText//错误,每次都是第一个节点得到
的PriceUnit.InnerText,这个要注意,如果通过 for循环就简单些,PriceNode.SelectNodes("//PriceUnit")[i].InnerText 因为你在select 时候,还是针对,此nodeList的document的select,返回的都是同一个list.
}
}
for循环如下即可:
for ( int j = 0; j < nodeList.Count; j++ )
{
XmlNode priceNode = nodeList.Item( j );
start = Convert.ToDateTime( priceNode.SelectNodes("//StartTime")[j].InnerText );
end = Convert.ToDateTime( priceNode.SelectNodes("//EndTime")[j].InnerText );
if ( start <= NowDay && end >= NowDay )
{
isExistPrice = true;//房型在价格区间内有价格
strMemberPrice = priceNode.SelectNodes("//MemberPrice")[j].InnerText;
strWeekendPrice = priceNode.SelectNodes("//WeekendPrice")[j].InnerText;
strUnionMemberPrice = priceNode.SelectNodes("//UnionMemberPrice")[j].InnerText;
strUnionWeekendPrice = priceNode.SelectNodes("//UnionWeekendPrice")[j].InnerText;
break;
}
}
因为是初次用,不知道还有什么好的方法进行筛选数据,这样有些笨,但是用xml 处理完数据可以删除,可以提高速度
foreach ( XmlNode node in nodeRoomList )
{
xmlDocPrice.DocumentElement.AppendChild( xmlDocPrice.ImportNode( node, true ) );//插入节点
elementRoomPrice.RemoveChild( node );//删除节点
}