我有一个复杂的XML文件,我想从不同的Set标签中检索不同的值。最后,我需要将这些值转换为CSV文件。
我正在尝试检索
的值 XmlDocument document = new XmlDocument();
document.Load(@"D:\\xml_1.xml");
string myXmlString = document.OuterXml.ToString();
XElement xml = XElement.Parse(myXmlString);
Console.WriteLine(string.Format("{0}",xml.XPathSelectElement("/UpdateDB/Transaction/Insert/Set/szItemID").Value));
我试图通过以下代码检索第一个元素,但收到错误
NullReferenceException未处理 对象引用未设置为对象的实例
代码
StringBuilder dataToBeWritten = new StringBuilder();
var doc = XDocument.Load(@"D:\xml_2.xml");
foreach (var trans in doc.Descendants("Transaction"))
{
var val3 = (string)doc.Descendants("Set").Elements("szItemID").First();
var val4 = (string)doc.Descendants("Set").Elements("lMerchandiseStructureID").First();
var val5 = (string)doc.Descendants("Set").Elements("szName").First();
var val6 = (string)doc.Descendants("Set").Elements("lRetailStoreID").First();
var val7 = (string)doc.Descendants("Set").Elements("bIsContract").First();
dataToBeWritten.Append(val3);
dataToBeWritten.Append(",");
dataToBeWritten.Append(val4);
dataToBeWritten.Append(",");
dataToBeWritten.Append(val5);
dataToBeWritten.Append(",");
dataToBeWritten.Append(val6);
dataToBeWritten.Append(",");
dataToBeWritten.Append(val7);
dataToBeWritten.Append(",");
dataToBeWritten.Append(Environment.NewLine);
}
Console.WriteLine(dataToBeWritten.ToString());
Console.ReadLine();
var testpath = @"D:\\Lutchmee2.csv";
File.WriteAllText(testpath, dataToBeWritten.ToString());
请帮忙
{{1}}
答案 0 :(得分:0)
您的XElement
UpdateDB
,因此从该上下文中没有子UpdateDB
。您必须将查询修改为:
/Transaction/Insert/Set/szItemID
也就是说,目前还不清楚为什么要将文档加载到DOM中,将其转换为字符串而不是解析为XElement
。只需加载到XDocument
并使用原始查询:
var doc = XDocument.Load(@"D:\xml_1.xml");
var val = (string) doc.XPathSelectElement("/UpdateDB/Transaction/Insert/Set/szItemID");
或者更好的是,按照预期使用LINQ to XML:
var val = (string) doc.Descendants("Set").Elements("szItemID").First()