在c#中解析一个字符串

时间:2010-05-28 14:08:59

标签: c# xml string linq-to-xml

假设有一个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#中实现这一目标的最佳方法是什么。

谢谢,

6 个答案:

答案 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表达式
相关问题