选择 XML 个元素的值

Selecting the value of XML elements

我对 XML 文件没有太多经验,但我试图附加一个我在网上找到的教程来满足我的需要,但我没有得到我期望的结果。

https://support.microsoft.com/en-us/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>

我试图用每个状态的值填充一个列表框,但我的代码要么是 returns 白色 space,要么只是 XML 标签中的文本

例如 状态.. 状态.. 对每个元素重复。

          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 returns "State" reader.Value returns "Whitespace"

我不明白为什么 reader.Value 不 return 肯塔基肯塔基... 我见过其他使用字符串生成器的示例,这是一种糟糕的方法吗?

尝试 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/en-us/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);
}