简体   繁体   English

比较XML与字符串的最佳方法

[英]Best method for comparing XML with string

I am looking for the best way to compare XML data with a string. 我正在寻找将XML数据与字符串进行比较的最佳方法。 the data is stored in a xml called test.xml, and must be compared with the name descendant, if there is a match more info from the xml must be added to a textbox and picture box. 数据存储在名为test.xml的xml中,并且必须与名称后代进行比较,如果存在匹配项,则必须将来自xml的更多信息添加到文本框和图片框。

My ( working ) code: 我的(工作)代码:

        var xmlDocument = XDocument.Load("test.xml");               // XML koppellen
        var key1 = xmlDocument.Descendants("NAME");                 // XML filepath
        var key2 = xmlDocument.Descendants("TITLE");                // XML titel
        var key3 = xmlDocument.Descendants("BRAND");                // XML afbeelding
        var key4 = xmlDocument.Descendants("TYPE");                 // XML merk
        var key5 = xmlDocument.Descendants("SOORT");                // XML type
        var key6 = xmlDocument.Descendants("NAAM");                 // XML naam

        List<string> file = new List<string>();
        List<string> title = new List<string>();
        List<string> brand = new List<string>();
        List<string> type = new List<string>();
        List<string> soort = new List<string>();
        List<string> naam = new List<string>();

        int i = 0;

        foreach (var key in key1)
        {
            file.Add(key.Value.Trim());
        }

        foreach (var key in key2)
        {
            title.Add(key.Value.Trim());
        }

        foreach (var key in key3)
        {
            brand.Add(key.Value.Trim());
        }

        foreach (var key in key4)
        {
            type.Add(key.Value.Trim());
        }

        foreach (var key in key5)
        {
            soort.Add(key.Value.Trim());
        }

        foreach (var key in key6)
        {
            naam.Add(key.Value.Trim());
        }


        foreach (var Name in naam)
        {
            if (textBox3.Text.ToString() == Name.ToString())
            {
                PDFLocation = file[i].ToString();
                pictureBox1.Image = pdfhandler.GetPDFthumbNail(PDFLocation);
                textBox4.Text =
                                title[i].ToString() + "\r\n" +
                                brand[i].ToString() + "\r\n" +
                                type[i].ToString() + "\r\n" +
                                soort[i].ToString() + "\r\n" +
                                textBox3.Text + "\r\n";
            }
            i++;
        }

] ]

I think this is not the best way to do it, but cant see a better way.... 我认为这不是最好的方法,但是看不到更好的方法。

Update: solution: 更新:解决方案:

        foreach (XElement element in xmlDocument.Descendants("PDFDATA"))
        {
            if (textBox3.Text.ToString() == element.Element("NAAM").Value.Trim())
                {

                    PDFLocation = element.Element("NAME").Value.ToString();
                    pictureBox1.Image = pdfhandler.GetPDFthumbNail(PDFLocation);
                    textBox4.Text =
                                    element.Element("TITLE").Value + "\r\n" +
                                    element.Element("BRAND").Value + "\r\n";
                    break;

                }
        }

Instead of thinking of the xml and a bunch of individual lists of data, it helps to think of it more as objects. 与其考虑xml和一堆单独的数据列表,不如将其更多地视为对象。 Then you can loop through each element one at a time and don't need to split it up into individual lists. 然后,您可以一次遍历每个元素,而无需将其拆分为单独的列表。 This not only removes duplicate code but more importantly creates a better abstraction of the data you are working with. 这不仅可以删除重复的代码,而且更重要的是,可以更好地抽象化您正在使用的数据。 This makes it easier to read and understand what the code is doing. 这使阅读和理解代码的作用变得更加容易。

foreach (XElement element in xmlDocument.Elements())
{
    if (textBox3.Text.ToString() == element.Element("NAAM").Value)
    {
        PDFLocation = element.Element("NAAM").Value;
        pictureBox1.Image = pdfhandler.GetPDFthumbNail(PDFLocation);
        textBox4.Text =
                        element.Element("Title").Value + "\r\n" +
                        element.Element("Brand").Value + "\r\n" +
                        element.Element("Type").Value + "\r\n"
                        // access rest of properties...
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM