[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

How to read XML

Posted on 2010-01-07
4
Medium Priority
?
607 Views
Last Modified: 2013-12-17
I have created two separate applications on is a setup tool that an admin will use to create all the configuration information for the users application. This configuration information is going to be stored inside an XML file. The user application will then read the XML file and apply all settings with in that XML file.

Part of those setting is displaying map images of a building in thumbnail format. Now I am unsure which way will be the easier of the two ideas I have. My first idea is to have the application read a directory destination from the XML file and display the images in that directory in thumbnail format. Then the user can click on the thumbnail and the image will be displayed in full size in a second window. In the second window the user should be able to zoom and pan the image.

 However the problem with idea one is I also need the icon image to be displayed over top the map images representing specific security device like a locked door, intercom station, video camera, and so on. So I thought the user application could read the image file name from the XML file and display that and it would also have the icon image location stated there as well. Grant I would still have to tell it what directory the image was in but the second idea might be easier since I need the icon image as well.

The XML schema I have is something like this:

<Setup>
<Options>
    <Maps>
      <MapDirectory>C:\Projects\AV4.1\Images</MapDirectory>
      <Map>
        <FileName>Testing image.bmp</FileName>
        <Icons>
          <Icon>
            <FileName>icon idle.bmp</FileName>
            <Location>250,175</Location>
          </Icon>
          <Icon>
            <FileName>icon idle.bmp</FileName>
            <Location>270,175</Location>
          </Icon>
          <Icon>
            <FileName>icon idle.bmp</FileName>
            <Location>230,175</Location>
          </Icon>
        </Icons>
      </Map>
    </Maps>
  </Options>
</Setup>

The code I am using for my two forms is attached below.

Form 1
---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Xml.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows;
using System.Security.Principal;
using System.Xml;

namespace AV4._1_ClientTool.Dialogs1.View
{
    public partial class Maps : Form
    {
        public Maps()
        {
            InitializeComponent();
        }

        //form global variables
        ImageList thumbs = new ImageList();
        Size ThumbSize = new Size(64, 64);
        PictureBox pictureBox1 = new PictureBox();

        #region Thumbnails

        private void Maps_Load(object sender, EventArgs e)
        {       
            thumbs.ImageSize = ThumbSize;
            thumbs.ColorDepth = ColorDepth.Depth32Bit;
            listView1.View = System.Windows.Forms.View.LargeIcon;
            listView1.LargeImageList = thumbs;
 
            string path = @"C:\Projects\AV4.1\Images";

            pictureBox1.Size = thumbs.ImageSize;
            pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
            System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path);
            foreach (System.IO.FileInfo fi in di.GetFiles("*.jpg"))
            {
                Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                pictureBox1.Image = Image.FromFile(fi.FullName);
                pictureBox1.DrawToBitmap(bmp, pictureBox1.ClientRectangle);
                thumbs.Images.Add(bmp);
                ListViewItem lvi = new ListViewItem(System.IO.Path.GetFileName(fi.Name), thumbs.Images.Count - 1);
                lvi.Tag = fi.Name;
                listView1.Items.Add(lvi);
            }
            foreach (System.IO.FileInfo fi in di.GetFiles("*.gif"))
            {
                Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                pictureBox1.Image = Image.FromFile(fi.FullName);
                pictureBox1.DrawToBitmap(bmp, pictureBox1.ClientRectangle);
                thumbs.Images.Add(bmp);
                ListViewItem lvi = new ListViewItem(System.IO.Path.GetFileName(fi.Name), thumbs.Images.Count - 1);
                lvi.Tag = fi.Name;
                listView1.Items.Add(lvi);
            }
        }
        #endregion

        #region Full Image Popup
        
        private void listView1_DoubleClick(object sender, EventArgs e)
        {
            Point pt = listView1.PointToClient(Cursor.Position);
            ListViewItem lvi = listView1.GetItemAt(pt.X, pt.Y);
            Dialogs1.Display.Map1 frm = new Dialogs1.Display.Map1((string)lvi.Tag);
            
            if (lvi != null)
            {
                frm.Text = lvi.Text;
                frm.Show();
            }
        }

        #endregion

    }
}
-------------------------------------------------------------------
Form 2
-------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Xml.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows;
using System.Security.Principal;
using System.Xml;


namespace AV4._1_ClientTool.Dialogs1.Display
{
    public partial class Map1 : Form
    {
        private double ZOOMFACTOR = 1.25;	// = 25% smaller or larger
        private int MINMAX = 5;		// 5 times bigger or smaller than the ctrl

        public Map1(string targetFileName)
        {
            InitializeComponent();

            this.pictureBox1.MouseWheel += new MouseEventHandler(pictureBox1_MouseWheel);

            if (!string.IsNullOrEmpty(targetFileName))
            {
                ShowFile(targetFileName);
            }
        }


        public void ShowFile(string targetFileName)
        {
            pictureBox1.Controls.Clear();
            foreach (var item in BusinessTier.IconFactory.ImageSet)
            {
                if (item.Image != targetFileName) continue;

                pictureBox1.Image = Image.FromFile(string.Format(@"{0}\{1}", item.Path, item.Image));
                foreach (var icon in item.Icons)
                {
                    var tempIcon = Image.FromFile(icon.File);
                    var tempPicturebox = new PictureBox
                    {
                        Image = tempIcon,
                        Location = new Point(icon.CoordinateX, icon.CoordinateY),
                        Size = new Size(tempIcon.Width, tempIcon.Height),
                    };
                    pictureBox1.Controls.Add(tempPicturebox);

                }
                break;
            }
        }

        #region Zooming Methods
        /// <summary>
        /// Make the PictureBox dimensions larger to effect the Zoom.
        /// </summary>
        /// <remarks>Maximum 5 times bigger</remarks>
        private void ZoomIn()
        {
            if ((pictureBox1.Width < (MINMAX * panel1.Width)) &&
                (pictureBox1.Height < (MINMAX * panel1.Height)))
            {
                pictureBox1.Width = Convert.ToInt32(pictureBox1.Width * ZOOMFACTOR);
                pictureBox1.Height = Convert.ToInt32(pictureBox1.Height * ZOOMFACTOR);
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            }
        }

        /// <summary>
        /// Make the PictureBox dimensions smaller to effect the Zoom.
        /// </summary>
        /// <remarks>Minimum 5 times smaller</remarks>
        private void ZoomOut()
        {
            if ((pictureBox1.Width > (panel1.Width / MINMAX)) &&
                (pictureBox1.Height > (panel1.Height / MINMAX)))
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                pictureBox1.Width = Convert.ToInt32(pictureBox1.Width / ZOOMFACTOR);
                pictureBox1.Height = Convert.ToInt32(pictureBox1.Height / ZOOMFACTOR);
            }
        }

        #endregion

        #region Mouse Events
        private void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
        {
            if (e.Delta < 0)
            {
                ZoomOut();
            }
            else
            {
                ZoomIn();
            }
        }
        private void pictureBox1_MouseEnter(object sender, EventArgs e)
        {
            if (pictureBox1.Focused == false)
            {
                pictureBox1.Focus();
            }
        }
        private void pictureBox1_MouseLeave(object sender, EventArgs e)
        {
            this.panel1.Focus(); // give the form focus instead
        }
        #endregion

        #region Button Events
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            ZoomIn();
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            ZoomOut();
        }
        #endregion
    }
}

Open in new window

0
Comment
Question by:seahna
  • 2
4 Comments
 
LVL 27

Expert Comment

by:Dabas
ID: 26208161
Very interesting.

But what is the question??

Dabas
0
 
LVL 96

Accepted Solution

by:
Bob Learned earned 2000 total points
ID: 26210224
May I be so bold as to suggest that the title suggests that the question is how to effectively read the XML file, to get that information.

Like, using an System.Xml.XmlDocument, and an XPath expression.

Example:

XmlDocument document = new XmlDocument();
document.Load(fileName);

XmlNodeList nodeList = document.SelectNodes("//Map");
0
 

Author Comment

by:seahna
ID: 26214524
I want to know which way would be better and what thought you might have on how to accomplish it? I am sorry thought that was clear when I stated I wasn't sure how to go about my task.
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 26214731
"Better" really depends on what is important to you.  If you need fast and efficient, then you can use an XmlTextReader.  If you want to easy to use, and easy to debug, then you can use an XmlDocument or XPathDocument class.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
In real business world data are crucial and sometimes data are shared among different information systems. Hence, an agreeable file transfer protocol need to be established.
Are you ready to place your question in front of subject-matter experts for more timely responses? With the release of Priority Question, Premium Members, Team Accounts and Qualified Experts can now identify the emergent level of their issue, signal…
Is your data getting by on basic protection measures? In today’s climate of debilitating malware and ransomware—like WannaCry—that may not be enough. You need to establish more than basics, like a recovery plan that protects both data and endpoints.…
Suggested Courses
Course of the Month19 days, 16 hours left to enroll

873 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question