之前了解过一点XML文件解析,断断续续看过各种各样的解析方法,大家都说要数LINQ to XML最简单了。不过几次想自己动手试试总是没成功,搜索到的教程都太繁杂晦涩。这次在单位实习又有解析XML的需求只有硬着头皮试试了,结果还成功了!总结下来还是需要思路清晰,XML文件就是一些节点和属性,只要掌握了对应的层次关系,代码逻辑清晰语法正确就一定能成功!
LINQ to XML确实很简单,这次主要是学习了这篇文章:
XML文件如下:
<?xml version="1.0" encoding="utf-8"?>
<Items>
<Item name="接入/切换冲突引起掉话预警">
<type name="Rx Power">
<min value="" operator=""></min>
<max value="" operator=""></max>
</type>
<type name="Tx Power">
<min value="" operator=""></min>
<max value="" operator=""></max>
</type>
<type name="Ec/Io">
<min value="" operator=""></min>
<max value="" operator=""></max>
</type>
</Item>
<Item name="超出覆盖区引起掉话预警">
<type name="Rx Power">
<min value="" operator=""></min>
<max value="-100" operator="<="></max>
</type>
<type name="Tx Power">
<min value="23" operator=">="></min>
<max value="" operator=""></max>
</type>
<type name="Ec/Io">
<min value="" operator=""></min>
<max value="-15" operator="<"></max>
</type>
<type name="Tx Adj">
<min value="10" operator=">"></min>
<max value="0" operator="<"></max>
</type>
</Item>
</Items>
注:XML文件中,由于<和>符号已经被占用,因此如果需要使用该符号的地方可以使用<对应<符号,>对应>符号。
XML解析代码
public static XML_Value_Class Read(string path)
{
XElement root = XElement.Load(path);//读取文件
XML_Value_Class xmlvalue = new XML_Value_Class();//XML类
XAttribute ItemName = null;
XAttribute TypeValueName = null;
XAttribute TypeValueMin = null;
XAttribute TypeValueMax = null;
XAttribute TypeValueMinOperator = null;
XAttribute TypeValueMaxOperator = null;
foreach (var item in root.Elements("Item"))//遍历节点Item
{
ItemName = item.Attribute("name");//这里是节点Item的name属性
foreach (var type in item.Elements("type"))遍历节点type
{
TypeValueName = type.Attribute("name");//这里是节点type的属性
TypeValueMin = type.Element("min").Attribute("value");//这里是节点min的属性,由于上面已经遍历到type节点,因此直接从var type读取就能找到对应的节点,然后取出属性
TypeValueMax = type.Element("max").Attribute("value");
TypeValueMinOperator = type.Element("min").Attribute("operator");
TypeValueMaxOperator = type.Element("max").Attribute("operator");
xmlvalue.value(ItemName.Value, TypeValueName.Value, TypeValueMax.Value, TypeValueMin.Value, TypeValueMaxOperator.Value, TypeValueMinOperator.Value);//这里是获取相应值赋到对应对象的函数,例如取ItemName的值语句为Itemname.Value;这里ItemName只是一个属性,在调试过程中看到的值为Item name="接入/切换冲突引起掉话预警",因此需要使用.Value操作来取出属性存储的值
}
}
return xmlvalue;
}
相应的还有写文件的操作,既然已经读取出来了,可以直接用=为属性赋值,也可以用ItemName.SetValue(value);来修改属性值。最后root.Save(path);
这次还学到一些关于数据的操作:
string.Empty; //表示空字符串,即""
Convert.ToDouble("12"); //将string类型的字符强制转换成double类型,要求string内容必须为数字字符。
double = double.NaN; //表示不是数字的值,次字段为常量。本次用于当max和min属性为string.Empty的时候赋值给double类型使用
double.IsNaN(double) //返回bool值,判断double类型数据是否为数字
作者:liulu
出处:http://www.cnblogs.com/liulunet/
谢谢支持

浙公网安备 33010602011771号