我只是c#xml的新手,所以我需要一些帮助来解析某个xml电报。基本上我需要的是循环每个节点以获取UID,ID和值是否有办法使用LINQ或任何其他方法来做到这一点?
<pre>
PROCESSDATA,ALSS_L01S01,10,20140721005835,<ProcessData tokens="14" cid="1234" uid_1="1234" result_1="P" uid_2="5655" result_2="P" uid_3="8487" result_3="P" uid_4="73695" result_4="P" uid_5="2365" result_5="P" uid_6="12584" result_6="P">
<TestPlans>
<TestPlan Name="FOO" Group="FOOFRGP">
<TestRun Uid="1234" UidType="SN">
<Test Id="INS" Value="270.50"/>
</TestRun>
<TestRun Uid="5655" UidType="SN">
<Test Id="INS" Value="260.50"/>
</TestRun>
<TestRun Uid="8487" UidType="SN">
<Test Id="INS" Value="260.50"/>
</TestRun>
<TestRun Uid="73695" UidType="SN">
<Test Id="INS" Value="260.50"/>
</TestRun>
<TestRun Uid="2365" UidType="SN">
<Test Id="INS" Value="260.50"/>
</TestRun>
<TestRun Uid="12584" UidType="PCB_SN">
<Test Id="INS" Value="260.50"/>
</TestRun>
</TestPlan>
</TestPlans>
</ProcessData>
</pre>
答案 0 :(得分:0)
可以这样做一个相当简单的方法,假设xmlString
变量包含您在问题中发布的XML:
var xDocument = XDocument.Parse(xmlString);
var testRunElements = xDocument.Descendants("TestRun");
foreach (var testRunElement in testRunElements)
{
var uid = testRunElement.Attribute("Uid").Value;
var testElement = testRunElement.Element("Test");
var id = testElement.Attribute("Id").Value;
var value = testElement.Attribute("Value").Value;
}
xDocument.Descendants
选择名为TestRun
的元素。
然后我们使用foreach
遍历每个元素以从命名属性中提取值。
为了安全起见,您可能希望在尝试访问任何属性之前检查元素和属性是否为null
,以防您的实际XML不能保证每个{具有此架构{ {1}}元素。
答案 1 :(得分:0)
您可以通过我通常使用http://xmltocsharp.azurewebsites.net/(或使用Visual Studio函数XML到CS(https://msdn.microsoft.com/en-us/library/hh371548(v=vs.110).aspx))来创建类 然后你可以将XML反序列化为对象
public static T Deserialize<T>(string path)
{
XmlSerializer ser = new XmlSerializer(typeof(T));
object result;
using (FileStream reader = File.Open(path, FileMode.Open))
{
result = ser.Deserialize(reader);
}
return (T)result;
}
链接到序列化:https://msdn.microsoft.com/en-us/library/tz8csy73(v=vs.110).aspx
string path =要加载的文件的路径。 T是输出对象