Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c语言中解析字符串_C#_Xml_String_Linq To Xml - Fatal编程技术网

C# 在c语言中解析字符串

C# 在c语言中解析字符串,c#,xml,string,linq-to-xml,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

假设存在如下所示的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中实现这一点的最佳方法是什么


谢谢,

最简单的方法:将其解析为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元素提供null。

不使用字符串。如果是XML,则将其作为XML读取,并使用XML LINQ库进行查询。

如果要解析XML,请使用框架中的XML类,尤其是XElement

将数据加载到

XElement element = XElement.Parse(myString);

然后,您可以使用定义良好的API轻松地操作对象。

我建议使用。通过简单的Linq查询,您可以获得位置;无需解析。

您可以为此使用Xpath表达式。

注意,您的结构不是XElement的有效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:

+1表示示例代码@Jay-如果你还不熟悉LINQ,就学习它。它将改变您对数据和数据收集的看法。当我尝试使用此命令时,会出现一个错误,即“System.Xml.Linq.XElement”不包含“Select”的定义。我做错什么了吗?很抱歉,我明白了,我用的是元素而不是元素