Hy вообще, я новичок в C# программировании, так что, возможно, это простой вопрос. Я пытаюсь прочитать XML -файл с помощью XDocument и записать локальное имя элемента в виде строки.
Для вывода я использую окно листинга SiemensNX, но все остальные окна вывода или txt-файл подходит.
Вот входные данные - XML:
<?xml version="1.0" encoding="utf-8"?>
<Rootlvl>
<Lvl_1>
<Lvl_2/>
</Lvl_1>
</Rootlvl>
Вот код C#:
using System.Xml.Linq;
using NXOpen;
namespace XmlElementName
{
class Program
{
private static ListingWindow lw = s.ListingWindow;
public static void Main()
{
string XmlFilePath = @"C:\Users\XXX\Desktop\TestXML.xml"; //XML path
string testnode = "Lvl_2"; //local name of a optional XML element
lw.Open(); //open NX listinwindow for output
//=============LoadXmlFile================
//get main Input
XDocument xml = XDocument.Load(XmlFilePath); //load XmlFile
//====================WriteOutElementName====================
XElement node;
if (testnode == null) //if no optional Element name --> take root element of XML
{
node = xml.Root;
}
else
{
// Find node to passed string "testnode" --> here "Lvl_2"
node = xml.Element(testnode);
}
lw.WriteLine("Test"); //Test if output works --> !yes it works
if(node != null)
{
string output = node.Name.LocalName;
//local name of XElement-variable "node" to string
lw.WriteLine(output); //output the local name of variable "node"
}
else
{
lw.WriteLine("Element with Name = " + testnode + "not found")
}
}
}
}
Выходные данные, если переменная testnode = " Lvl_2 "должно быть:
Test
Lvl_2
Выходные данные, если переменная testnode = null, должны быть:
Test
Rootlvl
Отладчик VS показывает, что
node = xml.Element(testnode); //testnode = Lvl_2
может ' Найти в XML элемент с именем «Lvl_2». Таким образом, он устанавливает «узел» в «Нуль» и выбрасывает следующее исключение:
«System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта.»
Но я знаю, что » Lvl_2 "является подэлементом XML. Что я могу сделать, чтобы найти этот элемент "Lvl_2" в XML?
Что я должен изменить в этой строке
node = xml.Element(testnode)
, чтобы найти элемент по имени?
Спасибо за вашу помощь, ребята.