xml文件如下结构所示:
要求:我想读取每一个row下面的key和第一个value的值;如何做呢?我的第一个办法:[后来自己想想,傻的很]
先把代码贴出来吧
public void operatedByXML(string PathXML)
{
string name = null;
string keyword = null;
string count = null;
int countIndex = 0;
XmlReader drr;
XmlReader dr = XmlReader.Create(PathXML);
while (dr.Read())
{
if (dr.NodeType == XmlNodeType.Element)
{
if (dr.Name == "Row")
{
name = dr.Name;
drr = dr.ReadSubtree();
#region
while (drr.Read())
{
if (drr.NodeType == XmlNodeType.Element)
{
name = drr.Name;
if (drr.Name == "Key")
{
keyword = drr.ReadString();
countIndex = 0;
} if (drr.Name == "Value")
{
if (countIndex == 0)
{
count = drr.ReadString();
countIndex = 1;
}
else
{
}
}
else
{ }
}
}
#endregion
}
ikw.insertKeyWords(Convert.ToInt32(count), keyword);//这里做的是插入数据库的操作
}
}
}
发现时间太慢了,然后才发现用xpath操作速度更快一些
string KeyWord = null, KeyPointCount = null;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(PathXML);
//获取row节点个数
int NodeCount= xmlDoc.SelectNodes("/AnalyticsReport/Report/Table/Row").Count;
for (int i = 0; i < NodeCount; i++)
{
XmlNode xmlNode = xmlDoc.SelectNodes("/AnalyticsReport/Report/Table/Row").Item(i);
KeyWord = xmlNode["Key"].InnerText;
KeyPointCount = xmlNode["Cell"]["Content"]["Value"].InnerText;
ikw.insertKeyWords(Convert.ToInt32(KeyPointCount),KeyWord);
}
方法可能有多种,我只是简单的实现了我所要的
如有更好的能提高效率,欢迎指正
谢谢