Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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# 正确地读取xml,但以后会弄乱顺序_C#_Xml - Fatal编程技术网

C# 正确地读取xml,但以后会弄乱顺序

C# 正确地读取xml,但以后会弄乱顺序,c#,xml,C#,Xml,我将xml数据从文件解析为此类对象的列表: public class VerificationSample { public double DesiredA { get; set; } public double DesiredB { get; set; } public double DesiredC { get; set; } // .. public void ReadXml(XmlReader reader) { rea

我将xml数据从文件解析为此类对象的列表:

public class VerificationSample
{
    public double DesiredA { get; set; }
    public double DesiredB { get; set; }
    public double DesiredC { get; set; }

    // ..

    public void ReadXml(XmlReader reader)
    {
        reader.ReadToFollowing("VerificationSample");

        this.DesiredA = (double)FileStructure.GetAttributeSafe(reader, "DesiredA", typeof(double));
        this.DesiredB = (double)FileStructure.GetAttributeSafe(reader, "DesiredB", typeof(double));
        this.DesiredC = (double)FileStructure.GetAttributeSafe(reader, "DesiredC", typeof(double));
        this.ReferenceNumber = (int)FileStructure.GetAttributeSafe(reader, "ReferenceNumber", typeof(int));
        // ..
    }
}
我阅读了以下示例xml:

  <VerificationSamples Count="4">
    <VerificationSample DesiredA="0.000" DesiredB="50.000" DesiredC="0.000" ReferenceNumber="0"/>
    <VerificationSample DesiredA="75.000" DesiredB="-3.000" DesiredC="0.000" ReferenceNumber="0"/>
    <VerificationSample DesiredA="-30.000" DesiredB="0.000" DesiredC="0.000" ReferenceNumber="1"/>
    <VerificationSample DesiredA="-2.000" DesiredB="-60.000" DesiredC="0.200" ReferenceNumber="1"/>
  </VerificationSamples>

使用此例程:

public void LoadFromFile(string path)
{
    XmlReader reader = XmlReader.Create(path);

    // ..

    reader.ReadToFollowing("VerificationSamples");
    int count = (int)FileStructure.GetAttributeSafe(reader, "Count", typeof(int));
    this.VerificationSamples.Clear();

    for (int i = 0; i < count; i++)
    {
        VerificationSample newVerificationSample = new VerificationSample();
        newVerificationSample.ReadXml(reader);
        this.VerificationSamples.Add(newVerificationSample);
    }
}
public void LoadFromFile(字符串路径)
{
XmlReader=XmlReader.Create(路径);
// ..
读者。阅读以下内容(“验证样本”);
int count=(int)FileStructure.GetAttributeSafe(reader,“count”,typeof(int));
此.VerificationSamples.Clear();
for(int i=0;i

到目前为止,一切都很好,效果很好。但是,稍后当我执行另一个函数,试图访问我的
验证样本
列表以使用我的对象的一些值时,对象的顺序会变得混乱。。所以xml中的第一行(是第一个对象),但后来是第三行。。二是一。。第四是第二,依此类推(无明显模式)。有人能想象为什么吗?

如果文件不大,请使用XElement

using System.Xml.Linq  
XElement file=XElement.Load(@"your path");  
foreach(var VerificationSample in file.Elements("VerificationSample"))   
{  
   // do want you want XElement type VerificationSample in order at the file  
}

如果文件不大,请使用XElement

using System.Xml.Linq  
XElement file=XElement.Load(@"your path");  
foreach(var VerificationSample in file.Elements("VerificationSample"))   
{  
   // do want you want XElement type VerificationSample in order at the file  
}
根据,
List
保证插入顺序和检索顺序

如果项目没有按照添加顺序出现,则会有一些外力干扰顺序(可能是排序)。

Per,
List
保证插入顺序和检索顺序


如果项目没有按照添加顺序出现,则会有一些外力干扰顺序(可能是排序)。

这是由于从数据库检索数据时出现问题造成的。通过在xml
OrderID
中添加一个属性,该属性将用作订单的引用,目前已修复:

  <VerificationSamples Count="4">
    <VerificationSample DesiredA="0.000" DesiredB="50.000" DesiredC="0.000" ReferenceNumber="0" OrderID="1"/>
    <VerificationSample DesiredA="75.000" DesiredB="-3.000" DesiredC="0.000" ReferenceNumber="0" OrderID="2"/>
    <VerificationSample DesiredA="-30.000" DesiredB="0.000" DesiredC="0.000" ReferenceNumber="1" OrderID="3"/>
    <VerificationSample DesiredA="-2.000" DesiredB="-60.000" DesiredC="0.200" ReferenceNumber="1" OrderID="4"/>
  </VerificationSamples>


每当我从数据库中检索列表时,我都会按照OrderID对其进行排序<代码>验证样本.OrderBy(x=>x.OrderID)

发生这种情况是因为从数据库检索数据时出现问题。通过在xml
OrderID
中添加一个属性,该属性将用作订单的引用,目前已修复:

  <VerificationSamples Count="4">
    <VerificationSample DesiredA="0.000" DesiredB="50.000" DesiredC="0.000" ReferenceNumber="0" OrderID="1"/>
    <VerificationSample DesiredA="75.000" DesiredB="-3.000" DesiredC="0.000" ReferenceNumber="0" OrderID="2"/>
    <VerificationSample DesiredA="-30.000" DesiredB="0.000" DesiredC="0.000" ReferenceNumber="1" OrderID="3"/>
    <VerificationSample DesiredA="-2.000" DesiredB="-60.000" DesiredC="0.200" ReferenceNumber="1" OrderID="4"/>
  </VerificationSamples>


每当我从数据库中检索列表时,我都会按照OrderID对其进行排序<代码>验证样本.OrderBy(x=>x.OrderID)

这是因为它只是从列表中任意获取对象-您需要使用
.OrderBy(x=>x.SomeValue)
以特定的方式返回它们order@Geoff它从不随机抓取xml行。它总是从第一行->添加对象,第二行->添加对象开始。。等等,我看了很多遍。如果是这样的话,您会为您的论点提出什么解决方案?您是对的-它将按顺序抓取XML行-但是当您从内存中再次迭代/抓取列表时,内存中的“列表”(
VerificationSamples
?)将需要对值进行排序;否则,对于您@FirstStep,顺序将看起来是“随机的”Q-您是否希望以任何特定顺序输出
VerificationSamples
?或者你只是在问为什么它们被任意输出?@FirstStep认为你的方法是正确的。我会在数据库中创建一个
Order
列,并使其成为一个自动递增键(或类似键)。或者,您可以在从Xml创建集合时执行此操作(仅在读取项时设置对象的属性)。然后,您可以在迭代收集时使用
.OrderBy(x=>x.Order)
这是因为它只是从列表中任意获取对象-您需要使用
.OrderBy(x=>x.SomeValue)
以特定的方式返回它们order@Geoff它从不随机抓取xml行。它总是从第一行->添加对象,第二行->添加对象开始。。等等,我看了很多遍。如果是这样的话,您会为您的论点提出什么解决方案?您是对的-它将按顺序抓取XML行-但是当您从内存中再次迭代/抓取列表时,内存中的“列表”(
VerificationSamples
?)将需要对值进行排序;否则,对于您@FirstStep,顺序将看起来是“随机的”Q-您是否希望以任何特定顺序输出
VerificationSamples
?或者你只是在问为什么它们被任意输出?@FirstStep认为你的方法是正确的。我会在数据库中创建一个
Order
列,并使其成为一个自动递增键(或类似键)。或者,您可以在从Xml创建集合时执行此操作(仅在读取项时设置对象的属性)。然后你可以在迭代你的收藏时
.OrderBy(x=>x.Order)
,谢谢Mehmet的建议。但是XmlReader在代码中无处不在,更改它现在是一个耗时的过程,谢谢Mehmet的建议。但是XmlReader在代码中无处不在,改变它现在是一个非常耗时的过程,Mike我花了很多时间调试这个案例。我在某处寻找排序/排序依据函数,但找不到任何函数。我认为数据库正在以任意方式检索数据(bug)。通过在xml中硬编码OrderID并将其保留为我的OrderReferenceMike我花时间调试这个案例,现在修复了这个问题。我在某处寻找排序/排序依据函数,但找不到任何函数。我认为数据库正在以任意方式检索数据(bug)。通过在xml中硬编码OrderID并将其作为我的OrderReference,修复了目前的情况