假设有一个xml文件,如下所示:
<Instances>
<Bits = "16" XCoord = "64" YCoord = "64" ZCoord = "64" FileType="jpeg" Location="C:\Series1\Image1.jpg" ImageNumber = "1"/>
<Bits = "16" XCoord = "64" YCoord = "64" ZCoord = "64" FileType="jpeg" Location="C:\Series1\Image2.jpg" ImageNumber = "2"/>
<Bits = "16" XCoord = "64" YCoord = "64" ZCoord = "64" FileType="jpeg" Location="C:\Series1\Image3.jpg" ImageNumber = "3"/>
<Bits = "16" XCoord = "64" YCoord = "64" ZCoord = "64" FileType="jpeg" Location="C:\Series1\Image4.jpg" ImageNumber = "4"/>
<Bits = "16" XCoord = "64" YCoord = "64" ZCoord = "64" FileType="jpeg" Location="C:\Series1\Image5.jpg" ImageNumber = "5"/>
</Instances>
此xml文件作为字符串读取并传递给函数。此xml文件包含有关特定图像文件的信息。我想从这个字符串中提取所有图像文件的位置。因此无论“位置”提交的价值如何,我都需要收集所有这些价值。在C#中实现这一目标的最佳方法是什么。
谢谢,
答案 0 :(得分:17)
最简单的方法:将其解析为XML(我建议使用LINQ to XML),然后使用XML API添加信息。将其视为原始字符数据毫无意义。
样品:
XElement root = XElement.Parse(text);
List<string> images = root.Elements("Bits")
.Select(x => (string) x.Attribute("Location"))
.ToList();
(对于任何不包含Bits
属性的Location
元素,该值为null。)
答案 1 :(得分:5)
请注意,此处的结构不是XElement.Parse的有效XML,因为您的元素没有名称,只有属性。
可能的正确结构是:
<Instances>
<Image Bits = "16" XCoord = "64" YCoord = "64" ZCoord = "64" FileType="jpeg" Location="C:\Series1\Image1.jpg" ImageNumber = "1" />
<Image Bits = "16" XCoord = "64" YCoord = "64" ZCoord = "64" FileType="jpeg" Location="C:\Series1\Image2.jpg" ImageNumber = "2" />
<Image Bits = "16" XCoord = "64" YCoord = "64" ZCoord = "64" FileType="jpeg" Location="C:\Series1\Image3.jpg" ImageNumber = "3" />
<Image Bits = "16" XCoord = "64" YCoord = "64" ZCoord = "64" FileType="jpeg" Location="C:\Series1\Image4.jpg" ImageNumber = "4" />
<Image Bits = "16" XCoord = "64" YCoord = "64" ZCoord = "64" FileType="jpeg" Location="C:\Series1\Image5.jpg" ImageNumber = "5" />
</Instances>
这些将导致C#代码解析 - 基于Jon Skeet上面的代码:
XElement root = XElement.Parse(text);
List<string> images = root.Elements("Image")
.Select(x => (string) x.Attribute("Location"))
.ToList();
HTH:)
答案 2 :(得分:3)
不使用字符串。如果是XML,则按原样读取并使用XML LINQ库进行查询。
答案 3 :(得分:3)
如果要解析XML,请使用框架中的XML类,尤其是XElement。
使用
加载数据XElement element = XElement.Parse(myString);
然后,您可以使用定义良好的API轻松操作对象。
答案 4 :(得分:1)
我建议使用Linq to XML。使用简单的Linq查询,您可以获得位置;没有必要解析。
答案 5 :(得分:0)
您可以在此
中使用Xpath表达式