如何使用 c# 从 XML 文件中检索所有元素



我正在尝试从XML文件中检索所有元素,但我只能到达一个,有什么方法可以检索所有元素吗?

HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
            using (XmlReader reader = XmlReader.Create(new StreamReader(objResponse.GetResponseStream())))
            {
                while (reader.Read())
                {
                    #region Get Credit Score
                    //if (reader.ReadToDescendant("results"))
                    if (reader.ReadToDescendant("ssnMatchIndicator"))
                    {
                        string ssnMatchIndicator = reader.Value;
                    }
                    if (reader.ReadToDescendant("fileHitIndicator"))
                    {
                        reader.Read();//this moves reader to next node which is text 
                        result = reader.Value; //this might give value than 
                        Res.Response = true;
                        Res.SocialSecurityScore = result.ToString();
                        //break;
                    }
                    else
                    {
                        Res.Response = false;
                        Res.SocialSecurityScore = "Your credit score might not be available. Please contact support";
                    }
                    #endregion
                    #region Get fileHitIndicator
                    if (reader.ReadToDescendant("fileHitIndicator"))
                    {
                        reader.Read();
                        Res.fileHitIndicator = reader.Value;
                        //break;
                    }
                    #endregion
                }
            }   

有人可以帮助我解决这个问题吗?我也在使用objResponse.GetResponseStream((,因为XML来自服务器的响应。

提前非常感谢。

试试这个:

        XmlDataDocument xmldoc = new XmlDataDocument();
        XmlNodeList xmlnode ;
        int i = 0;
        string str = null;
        FileStream fs = new FileStream("product.xml", FileMode.Open, FileAccess.Read);
        xmldoc.Load(fs);
        xmlnode = xmldoc.GetElementsByTagName("Product");
        for (i = 0; i <= xmlnode.Count - 1; i++)
        {
            xmlnode[i].ChildNodes.Item(0).InnerText.Trim();
            str = xmlnode[i].ChildNodes.Item(0).InnerText.Trim() + "  " + xmlnode[i].ChildNodes.Item(1).InnerText.Trim() + "  " + xmlnode[i].ChildNodes.Item(2).InnerText.Trim();
            MessageBox.Show (str);
        }
我不知道

为什么你正在做的事情不起作用,但我不会使用这种方法。 我发现以下内容效果很好。无论您是从流中获取 xml,只需将其放入字符串中并砰砰...

StreamReader reader = new StreamReader(sourcepath);
string xml = reader.ReadToEnd();
reader.Close();
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNodeList list = doc.GetElementsByTagName("*");
foreach (XmlNode nd in list)
{
    switch (nd.Name)
    {
        case "ContactID":
            var ContactIdent = nd.InnerText;
            break;
        case "ContactName":
            var ContactName = nd.InnerText;
            break;
    }
}

要捕获 Xml 标记之间的内容,如果没有子 Xml 标记,请使用 InnerText 属性,例如 XmlNode.InnerText .要捕获节点属性中引号之间的内容,请使用 XmlAttribute.Value

至于遍历属性,如果你的一个节点有属性,比如这里的XML中的元素"Name"、"SpectralType"和"Orbit":

<System>
  <Star Name="Epsilon Eridani" SpectralType="K2v">
    <Planets>
      <Planet Orbit="1">Bill</Planet>
      <Planet Orbit="2">Moira</Planet>
    </Planets>
  </Star>
</System>

使用 Attributes 属性检测它们,并循环访问它们,如下所示:

if (nd.Attributes.Count > 0)
{
    XmlAttributeCollection coll = nd.Attributes;
    foreach (XmlAttribute cn in coll)
    {
        switch (cn.Name)
        {
            case "Name":
                thisStar.Name = cn.Value;
                break;
            case "SpectralType":
                thisStar.SpectralClass = cn.Value;
                break;
        }
    }
}

您可能会在这里找到更多有用的信息。

相关内容

  • 没有找到相关文章

最新更新