Используя C#, как я могу отображать XML построчно?
Hy,
У меня есть например этот XML:
<books>
<book1 name="Cosmic">
<attribute value="good"/>
</book1>
</books>
Как я могу отображать его в элементе управления listBox построчно, чтобы в конечном итоге это был список с 5 строками в этом случае?
В данный момент я пишу XML с использованием LINQ to XML следующим образом:
foreach (XElement element in document.DescendantNodes())
{
MyListBox.Items.Add(element.ToString());
}
Но окончательный результат помещает каждый узел xml в один элемент списка (включая дочерние узлы).
У кого-нибудь есть идеи, как можно построчно помещать xml в элементы списка?
Благодарю.
Джефф
3 ответа
Простое решение будет использовать рекурсивную функцию, подобную следующей:
public void FillListBox(ListBox listBox, XElement xml)
{
listBox.Items.Add("<" + xml.Name + ">");
foreach (XNode node in xml.Nodes())
{
if (node is XElement)
// sub-tag
FillListBox(listBox, (XElement) node);
else
// piece of text
listBox.Items.Add(node.ToString());
}
listBox.Items.Add("</" + xml.Name + ">");
}
Конечно, этот будет печатать только имена тегов (например, <book1>
в вашем примере) а не атрибуты (name="Cosmic"
так далее.). Я уверен, что вы можете положить их в себя.
Если вы хотите отобразить ваш необработанный XML в списке, используйте текстовый поток для чтения ваших данных.
using(StreamReader re = File.OpenText("Somefile.XML"))
{
string input = null;
while ((input = re.ReadLine()) != null)
{
MyListBox.Items.Add(input);
}
}
Джефф, может быть, было бы намного проще реализовать (и читать / поддерживать) с простым TextReader.ReadLine()? Я не знаю, чего вы пытаетесь достичь, только предложение.