Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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文件,每个文件描述一个对象的属性。每个对象都不同,这意味着XML文件不同。我正试图为我想从文件中解析出来的每一位数据编写一个函数 其目的是收集信息。创建一个新对象,然后将其作为加密文件写入磁盘。我已经研究了序列化,但我认为由于提供给我的数据不一致,它可能会给我带来问题 以下是XML的一个示例: <TestXMl Var1="000" Var2="000" Var3="01"> <var4>testdata</var4> <

我有数千个XML文件,每个文件描述一个对象的属性。每个对象都不同,这意味着XML文件不同。我正试图为我想从文件中解析出来的每一位数据编写一个函数

其目的是收集信息。创建一个新对象,然后将其作为加密文件写入磁盘。我已经研究了序列化,但我认为由于提供给我的数据不一致,它可能会给我带来问题

以下是XML的一个示例:

<TestXMl Var1="000" Var2="000" Var3="01">

    <var4>testdata</var4>
    <var5>testdata</var5>

    <var6>testdata</var6>

    <DeeperLevel>
        <var7>testdata</var7>
        <var8>testdata</var8>
        <var9>testdata</var9>
        <var10>testdata</var10>
    </Deeper

Level>
</TestXMl>
我对var5和var6都使用上述函数。但是,我无法使此函数与其他变量一起工作。我有点不确定我是否在写函数的方向。所有的建议都是非常受欢迎的


提前欢呼

您可以使用
列表来收集任意数量的字符串属性,而不是单个字符串属性。然后,您可以通过索引引用它们。

var1、2和3不是元素的属性

试一试


考虑使用XPath。它们是XML的查询语言,就像SQL是RDBMS的查询语言一样


这是一个样品

        static void Main(string[] args)
    {
        string s = "<TestXMl Var1=\"000\" Var2=\"000\" Var3=\"01\"><var4>testdata</var4><var5>testdata</var5><var6>testdata</var6><DeeperLevel><var7>testdata</var7><var8>testdata</var8><var9>testdata</var9><var10>testdata</var10></DeeperLevel></TestXMl> ";

        XmlDocument xDoc = new XmlDocument();
        xDoc.LoadXml(s);

        string var1 = xDoc.SelectSingleNode("/TestXMl/attribute::Var1").Value;
        Console.WriteLine(var1);

        string var2 = xDoc.SelectSingleNode("/TestXMl/attribute::Var2").Value;
        Console.WriteLine(var2);

        string var3 = xDoc.SelectSingleNode("/TestXMl/attribute::Var3").Value;
        Console.WriteLine(var3);

        string var4 = xDoc.SelectSingleNode("/TestXMl/var4").InnerText;
        Console.WriteLine(var4);

        string var5 = xDoc.SelectSingleNode("/TestXMl/var5").InnerText;
        Console.WriteLine(var5);

        string var6 = xDoc.SelectSingleNode("/TestXMl/var6").InnerText;
        Console.WriteLine(var6);

        string var7 = xDoc.SelectSingleNode("/TestXMl/DeeperLevel/var7").InnerText;
        Console.WriteLine(var7);

        string var8 = xDoc.SelectSingleNode("/TestXMl/DeeperLevel/var8").InnerText;
        Console.WriteLine(var8);


        string var9 = xDoc.SelectSingleNode("/TestXMl/DeeperLevel/var9").InnerText;
        Console.WriteLine(var9);

        string var10 = xDoc.SelectSingleNode("/TestXMl/DeeperLevel/var10").InnerText;
        Console.WriteLine(var10);

    }
static void Main(字符串[]args)
{
字符串s=“TestDataTestDataTestData”;
XmlDocument xDoc=新的XmlDocument();
xDoc.LoadXml;
字符串var1=xDoc.SelectSingleNode(“/TestXMl/attribute::var1”).Value;
控制台写入线(var1);
字符串var2=xDoc.SelectSingleNode(“/TestXMl/attribute::var2”).Value;
控制台写入线(var2);
字符串var3=xDoc.SelectSingleNode(“/TestXMl/attribute::var3”).Value;
控制台写入线(var3);
字符串var4=xDoc.SelectSingleNode(“/TestXMl/var4”).InnerText;
控制台写入线(var4);
字符串var5=xDoc.SelectSingleNode(“/TestXMl/var5”).InnerText;
控制台写入线(var5);
字符串var6=xDoc.SelectSingleNode(“/TestXMl/var6”).InnerText;
控制台写入线(var6);
字符串var7=xDoc.SelectSingleNode(“/TestXMl/DeeperLevel/var7”).InnerText;
控制台写入线(var7);
字符串var8=xDoc.SelectSingleNode(“/TestXMl/DeeperLevel/var8”).InnerText;
控制台写入线(var8);
字符串var9=xDoc.SelectSingleNode(“/TestXMl/DeeperLevel/var9”).InnerText;
控制台写入线(var9);
字符串var10=xDoc.SelectSingleNode(“/TestXMl/DeeperLevel/var10”).InnerText;
控制台写入线(var10);
}


希望这有助于……;)

public void ParseVar4(字符串目录){XmlTextReader FixtureReader=new XmlTextReader(目录);FixtureReader.WhitespaceHandling=WhitespaceHandling.None;XmlDocument xDoc=new XmlDocument();xDoc.Load(FixtureReader);var4=xDoc.SelectSingleNode(“/TestXMl/attribute::Var3”).Value;}抱歉@Michael如果这是一个问题,我没有收到您的评论,请详细说明,以便我能帮助您。我运行了代码(在var4前面添加了字符串),它的行为正常。。。
XmlAttributeCollection atribs = doc.DocumentElement.Attributes;
        static void Main(string[] args)
    {
        string s = "<TestXMl Var1=\"000\" Var2=\"000\" Var3=\"01\"><var4>testdata</var4><var5>testdata</var5><var6>testdata</var6><DeeperLevel><var7>testdata</var7><var8>testdata</var8><var9>testdata</var9><var10>testdata</var10></DeeperLevel></TestXMl> ";

        XmlDocument xDoc = new XmlDocument();
        xDoc.LoadXml(s);

        string var1 = xDoc.SelectSingleNode("/TestXMl/attribute::Var1").Value;
        Console.WriteLine(var1);

        string var2 = xDoc.SelectSingleNode("/TestXMl/attribute::Var2").Value;
        Console.WriteLine(var2);

        string var3 = xDoc.SelectSingleNode("/TestXMl/attribute::Var3").Value;
        Console.WriteLine(var3);

        string var4 = xDoc.SelectSingleNode("/TestXMl/var4").InnerText;
        Console.WriteLine(var4);

        string var5 = xDoc.SelectSingleNode("/TestXMl/var5").InnerText;
        Console.WriteLine(var5);

        string var6 = xDoc.SelectSingleNode("/TestXMl/var6").InnerText;
        Console.WriteLine(var6);

        string var7 = xDoc.SelectSingleNode("/TestXMl/DeeperLevel/var7").InnerText;
        Console.WriteLine(var7);

        string var8 = xDoc.SelectSingleNode("/TestXMl/DeeperLevel/var8").InnerText;
        Console.WriteLine(var8);


        string var9 = xDoc.SelectSingleNode("/TestXMl/DeeperLevel/var9").InnerText;
        Console.WriteLine(var9);

        string var10 = xDoc.SelectSingleNode("/TestXMl/DeeperLevel/var10").InnerText;
        Console.WriteLine(var10);

    }