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

时间:2018-04-18 20:37:44

标签: c# asp.net xml web-services http

我正在尝试从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来自服务器的响应。

提前多多感谢。

2 个答案:

答案 0 :(得分:0)

我不知道为什么你所做的不起作用,但我不会使用那种方法。我发现以下内容效果很好。无论你是从流中获取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;
        }
    }
}

您可能会发现一些更有用的信息HERE

答案 1 :(得分:0)

试试这个:

        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);
        }