繁体   English   中英

选择XML元素的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM