从XDocument获取属性值

时间:2014-10-17 04:57:21

标签: c# xml linq-to-xml

我正在尝试从此XML中获取ResponseCode属性值。

XML是XDocument

    <IDMResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" MajorVersion="1" xmlns="http://www.fake.org/namespace/">
    <ARTSHeader>
        <Response ResponseCode="Rejected">
            <RequestID>1</RequestID>
            <BusinessError Severity="Error">
                <Code>IdmInvalidUserNamePasswordLoginProvided</Code>
                <Description>Invalid username or password, if problem persists, please contact Administrator</Description>
            </BusinessError>
        </Response>
    </ARTSHeader>
</IDMResponse>

4 个答案:

答案 0 :(得分:0)

foreach (XElement el in doc.Root.Elements())
{
    if(el.Name.ToString() == "ARTSHeader")
        foreach(XElement ell in el.Elements())
        {
            if(ell.Name.ToString() == "Response")
                string responseCode  = ele.Attribute("ResponseCode").Value;
        }
}

这对你有用吗?我不知道你的xml的整个结构,所以你可能需要更深入到嵌套的xml以获得第一个响应

答案 1 :(得分:0)

一种可能的方式:

.....
XNamespace ns = "http://www.fake.org/namespace/";
string responseCode = (string)doc.Descendants(ns+"Response")
                                 .First()
                                 .Attribute("ResponseCode");
Console.WriteLine(responseCode);

答案 2 :(得分:0)

使用XPath :(未进行错误检查)

XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable());
nsm.AddNamespace("def", "http://www.fake.org/namespace/");
XDocument doc = XDocument.Parse(xml);
string code = 
    doc
    .XPathSelectElement(@"/def:IDMResponse/def:ARTSHeader/def:Response", nsm)
    .Attribute("ResponseCode")
    .Value;

答案 3 :(得分:0)

你可以试试这个,我没有经过测试,所以你可能需要重新安排一些结构

XDocument doc1 = XDocument.Parse(soapResult); 
XNamespace ns1 = "http://www.fake.org/namespace/";
var items = doc1.Descendants(ns1 + "ARTSHeader").Descendants(ns1 + "Response").First().Attribute("ResponseCode").Descendants(ns1 + "BusinessError").First().Attribute("Severity")
               .Select((x) => new
                {
                    Code = x.Element(ns1 + "Code").Value,
                    Description = x.Element(ns1 + "Description").Value,

                });