Отображать данные XML в окне сообщения - PullRequest
0 голосов
/ 22 мая 2018
<?xml version="1.0" standalone="yes"?>
<Subject>
  <Book>
    <Name>ASP.NET</Name>
    <Author>ABC</Author>
    <Published>2018</Published>
    <Price>$100</Price>
  </Book>
</Subject>

Выше приведен XML-файл, который мне нужен, мне нужно отобразить эти значения в Messsage Box с помощью Windows Forms в C # без редактирования XML-файла, а в коде я не хочу использовать XML-узлы, такие как (имя, Цена ..).

Редактировать:

Что я пробовал до сих пор:

XmlDataDocument xmldoc = new XmlDataDocument();
XmlNodeList xmlnode;
int i = 0;
string str = null;
FileStream fs = new FileStream(
                    @"C:\\Users\\15034\\Desktop\\Book.xml", 
                    FileMode.Open, FileAccess.Read);
xmldoc.Load(fs);
xmlnode = xmldoc.GetElementsByTagName("Book");
for (i = 0; i <= xmlnode.Count - 1; i++)
{
    xmlnode[i].ChildNodes.Item(0).InnerText.Trim(); 
    str = xmlnode[i].ChildNodes.Item(0).InnerText.Trim();
    MessageBox.Show(str);
}

Вывод должен выглядеть следующим образом:

ASP.NET
ABC
2018
$100

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Вы можете легко сделать это, используя XDocument:

var doc = XDocument.Load(yourxmlfile);

//Preparing string in readable format
var result = (from att in doc.Descendants("Book")
    select 
    string.Format("Name: {0}", att.Element("Name").Value) + Environment.NewLine +
    string.Format("Author: {0}", att.Element("Author").Value) + Environment.NewLine + 
    string.Format("Published: {0}", att.Element("Published").Value) + Environment.NewLine + 
    string.Format("Price: {0}", att.Element("Price").Value));

//Joining the result from XML
var message = string.Join(Environment.NewLine, result.ToArray());
MessageBox.Show(message);

Как уже упоминалось @stuartd в комментариях, ваш xml недействителен с отсутствующим s в закрывающем теге.

0 голосов
/ 22 мая 2018

Использование XmlDocument:

XmlDocument xmldoc = new XmlDocument();
XmlNodeList xmlnode;
int i = 0;
string str = null;
FileStream fs = new FileStream(@"Books.xml", FileMode.Open, FileAccess.Read);
xmldoc.Load(fs);
xmlnode = xmldoc.GetElementsByTagName("Book");

for (i = 0; i <= xmlnode.Count - 1; i++)
{
    for (int j = 0; j <= xmlnode[i].ChildNodes.Count-1; j++)
    {
        if (xmlnode[i].ChildNodes.Item(j).Name == "Name")
            continue;
        xmlnode[i].ChildNodes.Item(j).InnerText.Trim();
        str = xmlnode[i].ChildNodes.Item(j).InnerText.Trim();
        MessageBox.Show(str);
    }
}

Использование XPath:

XPathDocument docNav = new XPathDocument("Books.xml");
XPathNavigator nav = docNav.CreateNavigator();
foreach (var item in nav.Select(@"/Subjects/Book/Author"))
{
    MessageBox.Show(item.ToString());
}    
0 голосов
/ 22 мая 2018

Вы можете использовать DataGridview следующим образом:

 private void Display_Data(object sender, EventArgs e)
 {
      try
      {
          XmlReader xmlFile ;
          xmlFile = XmlReader.Create("Product.xml", new XmlReaderSettings());
          DataSet ds = new DataSet();
          ds.ReadXml(xmlFile);
          dataGridView1.DataSource = ds.Tables[0];
      }
      catch (Exception ex)
      {
          MessageBox.Show (ex.ToString());
      } 
  }

нормально для отображения в окне сообщения используйте следующее:

 private void  Display_Message(object sender, EventArgs e)
 {
     OpenFileDialog ofd = new OpenFileDialog();
     ofd.Filter = "XML|*.xml";
     if ( ofd.ShowDialog() == DialogResult.OK)
     {
         XmlDocument xDoc = new XmlDocument();
         xDoc.Load(ofd.FileName);
         MessageBox.Show(xDoc.SelectSingleNode("FATCAFileErrorNotification/NotificationContentTxt").InnerText);
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...