更新:我只能下到我的XML中的第一个值节点。 下面的代码到达第一个值节点并显示数据,但我如何选择另一个节点?我现在每个项目节点只需要3个值。税年,账单号和appl_amt以及图像路径是我正在检索的唯一值。添加的Xml只是一部分。添加的部分重复几次,直到BatchCompiler / Batch / transactions / transaction标记关闭分组。
<?xml version="1.0"?>
<BatchCompiler>
<batch>
<batchid>95531</batchid>
<transactions>
<transaction>
<items>
<item>
<values>
<value>
<name>doc_type</name>
<data>1</data>
</value>
<value>
<name>doc_id</name>
<data>10</data>
</value>
<value>
<name>Bill Base Number</name>
<data>0007956700</data>
</value>
<value>
<name>Tax Year</name>
<data>2015</data>
</value>
<value>
<name>Year For</name>
<data>2015</data>
</value>
<value>
<name>Listing Type</name>
<data>0000</data>
</value>
<value>
<name>Postmark Date</name>
<data>08212015</data>
</value>
<value>
<name>appl_amt</name>
<data>18.12</data>
</value>
<value>
<name>tran_num</name>
<data>1</data>
</value>
<value>
<name>tran_seq</name>
<data>1</data>
</value>
</values>
<image>..\images\95531_1_S_1.tif</image>
</item>
namespace GETZIP2
{
class Program
{
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
doc.Load("\\example\\index.xml);
MessageBox.Show(doc.SelectSingleNode("BatchCompiler/batch/transactions/transaction/items/item/values/value").InnerText);
}
}
}
答案 0 :(得分:1)
LINQ to XML是比旧XmlDocument
DOM更好的API,而LINQ to XML的查询方法比使用XPath更好。
这样的东西可能会起作用,但是如果你展示了一些XML并且对你真正想要的值有更具体的了解会有所帮助。
var doc = XDocument.Load(@"\example\index.xml");
foreach (var value in doc.Descendants("value"))
{
var name = (string)value.Element("name");
var data = (string)value.Element("data");
// do something with these
}
如果您想查询特定的键/值对,可以执行以下操作:
var taxYear = doc.Descendants("value")
.Where(e => (string)e.Element("name") == "Tax Year")
.Select(e => (string)e.Element("data")
.Single();
您甚至可以考虑创建所有键/值对的字典:
var keyValues = doc.Descendants("value")
.ToDictionary(e => (string)e.Element("name"), e => (string)e.Element("data"));
var taxYear = keyValues["TaxYear"];
var billNumber = keyValues["Bill Base Number"];
答案 1 :(得分:-1)
除了Linq to XML之外,您还可以使用XmlReader
类。它提供ReadToNextSibling
等功能,帮助您通过兄弟姐妹。
ReadToDescendant
和MoveToNextAttribute
等其他功能可能派上用场。
XmlReader reader = XmlReader.Create(@"\example\index.xml");
// Move to the desired element.
reader.MoveToContent();
reader.ReadToDescendant("value");