C#解析XML超长字符串的问题!高分求助!!
我不太了解XML,现有如下字符串在 <itemData> ... </itemData> ,中有100件物品,请教各位如何批量获取每件物品的属性,并根据itemInfo,对ACCESS执行SQL语句?
字符串是连在一起的,为了查看方便,我写成如下格式。
<root>
<iteminfo>
<add key= "actionWord " value= "insert " />
<add key= "itemNum " value= "100 " />
</iteminfo>
<itemData>
<cell item= "1 ">
<add key= "frequency " value= "1 " />
<add key= "itemname " value= "AAAA " />
<add key= "color " value= "4 " />
<add key= "level " value= "37 " />
<add key= "type " value= "DX " />
<add key= "lengh " value= "4 " />
<add key= "p1 " value= "you5 " />
<add key= "p2 " value= "xia2 " />
<add key= "p3 " value= "tou2 " />
<add key= "p4 " value= "kui1 " />
<add key= "p5 " value= " " />
<add key= "p6 " value= " " />
<add key= "p7 " value= " " />
<add key= "p8 " value= " " />
<add key= "p9 " value= " " />
<add key= "p10 " value= " " />
</cell>
<cell item= "2 ">
<add key= "frequency " value= "1 " />
<add key= "itemname " value= "XXXX " />
<add key= "color " value= "4 " />
<add key= "level " value= "37 " />
<add key= "type " value= "ADD " />
<add key= "lengh " value= "4 " />
<add key= "p1 " value= "you5 " />
<add key= "p2 " value= "xia2 " />
<add key= "p3 " value= "tou2 " />
<add key= "p4 " value= "kui1 " />
<add key= "p5 " value= " " />
<add key= "p6 " value= " " />
<add key= "p7 " value= " " />
<add key= "p8 " value= " " />
<add key= "p9 " value= " " />
<add key= "p10 " value= " " />
</cell>
.........
</itemData>
</root>
[解决办法]
只能说用XmlDocument,XPath
------解决方案--------------------
你可以使用XmlTextReader来读取Xml信息,这样内存占用少且效率比XmlDocument高出多倍,当然你也可以使用XmlDocument来读取,我写了一个读取你的Xml文件的Key及Value值的一个方法,你可以参考着改一下:
public static void readXml(string fileName)
{
//XML记取器
XmlTextReader xmlNodeReader = null;
//打开XML文件
try
{
if (!System.IO.File.Exists(fileName))
{
return;
}
xmlNodeReader = new XmlTextReader(fileName);
while (xmlNodeReader.Read())
{
if (xmlNodeReader.MoveToContent() == XmlNodeType.Element && xmlNodeReader.Name == "add ")
{
string key = xmlNodeReader.GetAttribute( "key ");
string value = xmlNodeReader.GetAttribute( "value ");
System.Console.WriteLine(string.Format( "key:{0}; value:{1} ", key, value));
}
}
xmlNodeReader.Close();//关闭XML读取器
}
catch
{
if (xmlNodeReader != null)
{
xmlNodeReader.Close();
}
}
return;
}
[解决办法]
lz...
<cell item= "1 ">
<add key= "frequency " value= "1 " />
<add key= "itemname " value= "AAAA " />
<add key= "color " value= "4 " />
<add key= "level " value= "37 " />
<add key= "type " value= "DX " />
<add key= "lengh " value= "4 " />
<add key= "p1 " value= "you5 " />
<add key= "p2 " value= "xia2 " />
<add key= "p3 " value= "tou2 " />
<add key= "p4 " value= "kui1 " />
<add key= "p5 " value= " " />
<add key= "p6 " value= " " />
<add key= "p7 " value= " " />
<add key= "p8 " value= " " />
<add key= "p9 " value= " " />
<add key= "p10 " value= " " />
</cell>
改成这种写法
<cell item= "1 ">
<frequency> 1 </frequency>
<itemname> AAAA </itemname>
....
...
</cell>
这样就可以找对应的节点名和值
[解决办法]
XPath
使用XML parser
[解决办法]
楼主参考 平民百姓 的方法最好
至于 sinatly(爱在爱你) 的意见,改不改都行
取InnerText跟判断Attribute值其实都是一样的
具体可以参照一下xpath
[解决办法]
完整解决:
private void previous_Click(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
string strPath = "root/itemData/cell "; //查询路径
XmlNodeList nodeList = null;
string strItem = " "; //item值
string strKey = " "; //key值
string strValue = " "; //value值
try
{
xmlDoc.Load( "e:\\新建 文本文档 (2).xml ");
//获取所有的itemData项
nodeList = xmlDoc.SelectNodes(strPath);
//遍历所有节点
foreach (XmlNode node in nodeList)
{
strItem = node.Attributes[ "item "].InnerText;
//遍历所有字节点
foreach (XmlNode subNode in node.ChildNodes)
{
strKey=subNode.Attributes[ "key "].InnerText;
strValue = subNode.Attributes[ "value "].InnerText;
//strItem,strKey,strValue值都获取了,剩下就是对数据库操作,我就不再多说
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
[解决办法]
DOM是HTML和XML文档的编程基础,它定义了处理执行文档的途径。编程者可以使用DOM增加文档、定位文档结构、填加
修改删除文档元素。W3C的重要目标是把利用DOM提供一个使用于多个平台的编程接口。W3C DOM被设计成适合多个平台,可
使用任意编程语言实现的方法。