C# 如何获取XML元素属性值?

C# 如何获取XML元素属性值?,c#,xml,linq,C#,Xml,Linq,下面是我试图从中获取HotelCrossRef元素ResponseHotelCode属性值的xml 我尝试了以下代码,但在XmlNodeList string xmlResp = @"<?xml version=""1.0"" encoding=""utf-8""?><OTA_HotelDescriptiveContentNotifRS xmlns=""http://www.opentravel.org/OTA/2003/05"" xmlns:xsi=""http://www.

下面是我试图从中获取
HotelCrossRef
元素
ResponseHotelCode
属性值的xml

我尝试了以下代码,但在
XmlNodeList

string xmlResp = @"<?xml version=""1.0"" encoding=""utf-8""?><OTA_HotelDescriptiveContentNotifRS xmlns=""http://www.opentravel.org/OTA/2003/05"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:schemaLocation=""http://www.opentravel.org/OTA/2003/05 OTA_HotelDescriptiveContentNotifRS.xsd"" TimeStamp=""2015-07-31T12:36:23-00:00"" Target=""Test"" Version=""3.000"">
<UniqueID Type=""10"" ID=""1460495"" />
<TPA_Extensions>
<HotelCrossRefs>
<HotelCrossRef RequestHotelCode=""101010"" ResponseHotelCode=""1460495"" />
</HotelCrossRefs>
</TPA_Extensions>
<Success />
</OTA_HotelDescriptiveContentNotifRS>";

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlResp);

XmlNodeList xnList = xmlDocument.SelectNodes("/OTA_HotelDescriptiveContentNotifRS/TPA_Extensions/HotelCrossRefs");
foreach (XmlNode xn in xnList)
{
    if (xn.HasChildNodes)
    {
        foreach (XmlNode childNode in xn.ChildNodes)
        {
            string id = childNode.Attributes["ResponseHotelCode"].Value; 
            Console.WriteLine(id);
        }
    }
}
string xmresp=@”
";
XmlDocument XmlDocument=新的XmlDocument();
LoadXml(xmlResp);
XmlNodeList xnList=xmlDocument.SelectNodes(“/OTA\u HotelDescriptiveContentNotifRS/TPA\u Extensions/HotelCrossRefs”);
foreach(xnList中的XmlNode xn)
{
if(xn.HasChildNodes)
{
foreach(xn.ChildNodes中的XmlNode-childNode)
{
字符串id=childNode.Attributes[“ResponseHotelCode”].Value;
控制台写入线(id);
}
}
}

如果存在名称空间问题,则xml有一个默认名称空间,您必须在选择节点时声明该名称空间。请尝试以下操作:

string xmlResp = @"<?xml version=""1.0"" encoding=""utf-8""?><OTA_HotelDescriptiveContentNotifRS xmlns=""http://www.opentravel.org/OTA/2003/05"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:schemaLocation=""http://www.opentravel.org/OTA/2003/05 OTA_HotelDescriptiveContentNotifRS.xsd"" TimeStamp=""2015-07-31T12:36:23-00:00"" Target=""Test"" Version=""3.000"">
    <UniqueID Type=""10"" ID=""1460495"" />
    <TPA_Extensions>
    <HotelCrossRefs>
    <HotelCrossRef RequestHotelCode=""101010"" ResponseHotelCode=""1460495"" />
    </HotelCrossRefs>
    </TPA_Extensions>
    <Success />
    </OTA_HotelDescriptiveContentNotifRS>";

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlResp);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDocument.NameTable);
nsmgr.AddNamespace("xn", "http://www.opentravel.org/OTA/2003/05");

XmlNodeList xnList = xmlDocument.SelectNodes("/xn:OTA_HotelDescriptiveContentNotifRS/xn:TPA_Extensions/xn:HotelCrossRefs", nsmgr);
foreach (XmlNode xn in xnList)
{
    if (xn.HasChildNodes)
    {
        foreach (XmlNode childNode in xn.ChildNodes)
        {
            string id = childNode.Attributes["ResponseHotelCode"].Value;
            Console.WriteLine(id);
        }
    }
}
string xmresp=@”
";
XmlDocument XmlDocument=新的XmlDocument();
LoadXml(xmlResp);
XmlNamespaceManager nsmgr=新的XmlNamespaceManager(xmlDocument.NameTable);
nsmgr.AddNamespace(“xn”http://www.opentravel.org/OTA/2003/05");
XmlNodeList xnList=xmlDocument.SelectNodes(“/xn:OTA\u HotelDescriptiveContentNotifRS/xn:TPA\u Extensions/xn:HotelCrossRefs”,nsmgr);
foreach(xnList中的XmlNode xn)
{
if(xn.HasChildNodes)
{
foreach(xn.ChildNodes中的XmlNode-childNode)
{
字符串id=childNode.Attributes[“ResponseHotelCode”].Value;
控制台写入线(id);
}
}
}

请注意,我在
SelectNodes
方法中添加了另一个参数

如果存在名称空间问题,您的xml有一个默认名称空间,您必须在选择节点时声明该名称空间。请尝试以下操作:

string xmlResp = @"<?xml version=""1.0"" encoding=""utf-8""?><OTA_HotelDescriptiveContentNotifRS xmlns=""http://www.opentravel.org/OTA/2003/05"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:schemaLocation=""http://www.opentravel.org/OTA/2003/05 OTA_HotelDescriptiveContentNotifRS.xsd"" TimeStamp=""2015-07-31T12:36:23-00:00"" Target=""Test"" Version=""3.000"">
    <UniqueID Type=""10"" ID=""1460495"" />
    <TPA_Extensions>
    <HotelCrossRefs>
    <HotelCrossRef RequestHotelCode=""101010"" ResponseHotelCode=""1460495"" />
    </HotelCrossRefs>
    </TPA_Extensions>
    <Success />
    </OTA_HotelDescriptiveContentNotifRS>";

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlResp);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDocument.NameTable);
nsmgr.AddNamespace("xn", "http://www.opentravel.org/OTA/2003/05");

XmlNodeList xnList = xmlDocument.SelectNodes("/xn:OTA_HotelDescriptiveContentNotifRS/xn:TPA_Extensions/xn:HotelCrossRefs", nsmgr);
foreach (XmlNode xn in xnList)
{
    if (xn.HasChildNodes)
    {
        foreach (XmlNode childNode in xn.ChildNodes)
        {
            string id = childNode.Attributes["ResponseHotelCode"].Value;
            Console.WriteLine(id);
        }
    }
}
string xmresp=@”
";
XmlDocument XmlDocument=新的XmlDocument();
LoadXml(xmlResp);
XmlNamespaceManager nsmgr=新的XmlNamespaceManager(xmlDocument.NameTable);
nsmgr.AddNamespace(“xn”http://www.opentravel.org/OTA/2003/05");
XmlNodeList xnList=xmlDocument.SelectNodes(“/xn:OTA\u HotelDescriptiveContentNotifRS/xn:TPA\u Extensions/xn:HotelCrossRefs”,nsmgr);
foreach(xnList中的XmlNode xn)
{
if(xn.HasChildNodes)
{
foreach(xn.ChildNodes中的XmlNode-childNode)
{
字符串id=childNode.Attributes[“ResponseHotelCode”].Value;
控制台写入线(id);
}
}
}
请注意,我在
SelectNodes
方法中添加了另一个参数