[英]Selecting the value of XML elements
我对XML文件没有太多的经验,但是我试图附加一个我在网上找到的教程来满足我的需求,但并没有得到我期望的结果。
https://support.microsoft.com/zh-CN/help/307548/how-to-read-xml-from-a-file-by-using-visual-c
我到处搜寻,但发现的所有内容对我来说都没有意义。
我的XML在大多数情况下看起来像这样:
<US>
<!-- Kentucky Start -->
<State>Kentucky KY
<City>Newport
<Street>Pavilion Parkway<Number>130<PostalCode>41071</PostalCode></Number></Street>
</City>
<City>Corbin
<Street>Highway 90<Number>7351<PostalCode>40701</PostalCode></Number></Street>
</City>
</State>
</US>
我试图用每个状态的值填充列表框,但是我的代码要么返回空白,要么仅返回XML标记内的文本
例如State .. State ..对每个元素重复。
while (reader.Read()) {
switch (reader.NodeType) {
case XmlNodeType.Element: // The node is an element.
// Skip over root element
if (reader.Name.Equals("US")) {
reader.MoveToNextAttribute();
}
else {
if(reader.Name.Equals("State")) {
lbState.Items.Add(reader.Name);
lbState.Items.Add(reader.Value);
}
}
break;
reader.Name返回“状态” reader.Value返回“空白”
我不明白为什么reader.Value不返回肯塔基州KY ...我已经看到了其他使用字符串生成器的示例,这是一个不好的方法吗?
试试xml linq:
sing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication2
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
var results = doc.Descendants("State").Select(x => new {
cities = x.Elements("City").Select(y => new {
state = (string)x,
city = (string)y,
streets = y.Elements("Street").Select(z => (string)z).ToList()
}).ToList()
}).SelectMany(x => x.cities).ToList();
}
}
}
使用reader.ReadString()
而不是reader.Value
您可以使用XmDocument(请参阅: https ://msdn.microsoft.com/zh-cn/library/system.xml.xmldocument( v= vs.110).aspx),然后使用xpath表达式从中获取正确的元素您的文件:
同样,最好像这样封装状态名称(即,如果您拥有xml文档):
<name>Kentucy KY</name>
因此,您可以执行以下操作:
var items = new List<string>();
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml("yourxml");
var xmlNodes = xmlDocument.SelectNodes("//State/Name");
foreach (XmlNode node in xmlNodes)
{
items.Add(xmlNode.Value);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.