Visualización de información xml en la etiqueta
Frecuentes
Visto 3,490 equipos
0
Básicamente, puedo cargar mi archivo xml correctamente en una vista de lista, pero luego quiero que el usuario pueda hacer clic en los elementos en la vista de lista y desde su visualización de información sobre ese elemento que no está en la vista de lista sino en el xml.
Entonces pensé que podría cargar un xml cuando el usuario hace clic en el elemento y de alguna manera obtener esa información, pero no muestra nada en la etiqueta. Cualquier ayuda sería apreciada gracias.
XML:
<?xml version = "1.0" encoding="utf-8"?>
<project>
<test>
<code>ss</code>
<name>test</name>
</test>
<test>
<code>ss1</code>
<name>test1</name>
</test>
</project>
código:
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
namespace form
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
XmlTextReader reader = new XmlTextReader("XMLfile1.xml");
XmlNodeType type;
while (reader.Read())
{
type = reader.NodeType;
if (type == XmlNodeType.Element)
{
if (reader.Name == "name")
{
reader.Read();
listView1.Items.Add(reader.Value);
}
}
}
reader.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
XmlTextReader reader = new XmlTextReader("XMLFile1.xml");
XmlNodeType type;
while (reader.Read())
{
type = reader.NodeType;
if (type == XmlNodeType.Element)
{
if (reader.Name == "test")
{
reader.Read();
codelabel.Text = "s";
}
}
}
}
private void groupBox2_Enter(object sender, EventArgs e)
{
}
}
}
3 Respuestas
1
Usar estas extensiones,
Escribir:
protected string GetName(string code)
{
var item = XElement.Load("XMLfile1.xml").GetEnumerable("test", x =>
new
{
Code = x.Get("code", string.Empty),
Name = x.Get("name", string.Empty)
})
.FirstOrDefault(i => i.Code == code);
if(null != item)
return item.Name;
return "Item not found";
}
Esto busca la lista del archivo, verifica cada uno hasta que encuentra el código correcto y luego devuelve el name
valor. Luego coloque ese valor bajo su control. Si me equivoco de que está buscando por nombre, simplemente intercambie el código en la línea FirstOrDefault con la línea return item.Name.
Respondido 16 Feb 13, 19:02
0
Cree una clase que imite los datos en su archivo. Me gusta:
public class Project
{
public string Code { get; set; }
public string Name { get; set; }
}
Luego, leerá su archivo XML en lo que terminará siendo una Lista. Echa un vistazo a este tutorial:
private List<Project> _projects;
Luego agregaría sus datos de la Lista a su ListView.
foreach(Project proj in _projects)
{
listView1.Items.Add(proj.Name);
}
En su ListView SelectedIndexChanged puede acceder al índice adecuado de la Lista para mostrar el valor adecuado para su etiqueta.
codeLabel.Text = _projects[listView1.FocusedItem.Index].Code;
respondido 17 mar '12, 18:03
0
La Value
propiedad para el test
el nodo está vacío (solo contiene subnodos, sin texto).
Creo que debería cambiar su código para acumular el texto (con declaraciones, puede ver un ejemplo en MSDN) desde el comienzo de la prueba hasta que lea su etiqueta final.
Como alternativa (si el archivo XML no es grande) puede considerar usar LINQ a XML o simplemente un Documento Xml (es mucho más fácil de leer y siempre puedes tener Xml interno de cualquier nodo). Para un ejemplo puedes mirar esto artículo sobre CodeProject.
Para obtener una breve lista de lo que puede hacer para analizar XML, puede leer este artículo (No creo que sea muy bueno pero al menos es una... lista).
respondido 18 mar '12, 10:03
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# xml winforms or haz tu propia pregunta.
¿Qué significa "no funciona correctamente"? ¿Errores de tiempo de compilación? ¿Errores en tiempo de ejecución? ¿No pasa nada? No verifiqué el código, pero en su ejemplo, el valor que leyó de ellos XmlTextReader no va a ninguna parte (reader.Read(); codelabel.Text = "s";). - Adriano Repetti
no muestra nada cuando presiono un elemento en la vista de lista, es por eso que pregunto si es una forma en que puedo hacer que el programa sepa en qué elemento estoy haciendo clic e imprimir su subelemento en una etiqueta: Hashey100