我无法使用下面的代码显示任何内容。我只是尝试从xml文件中读取数据,并将其与应用程序一起显示。根据我的理解,批处理编译器将是我的根节点。最终我将把数据放在一个csv文件中,但我很慢,以确保并理解所有部分。任何建议都会很棒。
XML
<?xml version="1.0" encoding="utf-8" ?>
<BatchCompiler>
<batch>
<batchid>955698</batchid>
<transactions>
<transaction>
<image>..\images\955698_1_.tif</image>
<items>
<item>
<values>
<value>
<name>Bill Base Number</name>
<data>0002025330</data>
</value>-<value>
<name>acct_num2</name>
<data/>
</value>-<value>
<name>Tax Year</name>
<data>2015</data>
</value>
</values>
</item>
</items>
</transaction>
</transactions>
</batch>
</BatchCompiler>
CODE:
using System;
using System.Linq;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Linq;
using System.IO;
using System.IO.Compression;
using System.Windows;
using System.Windows.Forms;
namespace GetZip
{
class program
{
static void Main(string[] args)
{
XElement xml = XElement.Load("c:\\example\\extract\\index.xml");
var items = el.Elements("BatchCompiler").Elements("BatchCompiler").DescendantNodes();
items = from item in el.Elements("values").Elements("values").Descendants()
where item.Attribute("name").Value == "name"
select item.FirstNode;
foreach (XNode node in items)
{
Console.WriteLine(node.ToString());
}
}
}
}
答案 0 :(得分:0)
这里有一些问题。
<batch>
,<values>
,<items>
和<item>
都缺少样本文档中的结束标记。+
和-
部分),您可能会遇到问题。XElement
加载XmlReader
,请在完成XmlReader
之前关闭XElement
。更好的是,将XmlReader
包装在using
块中,并使用块将XElement
的使用放在其中。XmlReader
,只需使用XElement.Load(<filepath>)
方法。例如,XElement el = XElement.Load("C:\\example\\extract\\index.xml");
。当然,所有这些都预示着你实际上得到了一个有效的XML文档...... .Elements()
调用看起来不对,但无法将其修复为文档的当前状态,因为无法按原样解析文档。将来,请尝试发布您遇到的具体错误以及您目前尝试解决的步骤 - 例如,您应该在此处获得例外
第10行第6位的'values'开始标记与'transaction'的结束标记不匹配。第20行,第6位。
看看修复它 - 这实际上意味着首先获得一个有效的XML文档 - 然后如果你仍然遇到麻烦,你将会在一个更好的位置发布一个问题。
答案 1 :(得分:0)
正如丹所说,你的xml无效,应该是:
<BatchCompiler>
<batch>
<batchid>955698</batchid>
<transactions>
<transaction>
<image>..\images\955698_1_.tif</image>
<items>
<item>
<values>
<value>
<name>Bill Base Number</name>
<data>0002025330</data>
</value>
<value>
<name>acct_num2</name>
<data/>
</value>
<value>
<name>Tax Year</name>
<data>2015</data>
</value>
</values>
</item>
</items>
</transaction>
</transactions>
</batch>
</BatchCompiler>
此代码将列出名称元素值:
static void Main(string[] args)
{
XElement xml = XElement.Load(@"c:\Temp\index.xml");
var items = xml.Descendants("name");
foreach (var element in items)
{
Console.WriteLine(element.Value);
}
Console.WriteLine("Finished");
Console.ReadLine();
}
答案 2 :(得分:0)
上面/下面的答案用于获取名称值
static void Main(string[] args)
{
XElement xml = XElement.Load("c:\\example\\extract\\index.xml");
var items = xml.Descendants("name");
foreach (var element in items)
{
Console.WriteLine(element.Value);
}
Console.WriteLine("Finished");
Console.ReadLine();
}