在xDocument中找到节点值

时间:2015-03-12 09:06:13

标签: asp.net-mvc-4 c#-4.0 model-view-controller

我无法获得价值。

如何获得StatusDescription值?请告诉我。

<WebServiceResponse xmlns="ws.abc.com">
  <SubscriptionInfo xmlns="ws.abc.com">
    <LicenseStatusCode>0</LicenseStatusCode>
    <Amount>0</Amount>
  </SubscriptionInfo>
  <VerificationResponse xmlns="www.abc.com">
    <VerificationResult>
      <ServiceStatus>
        <StatusNbr>304</StatusNbr>
        <StatusDescription>Address Not Found</StatusDescription>
      </ServiceStatus>
      <ServiceResult />
    </VerificationResult>
  </VerificationResponse>
</WebServiceResponse>

2 个答案:

答案 0 :(得分:0)

你可以使用这样的东西(使用Linq-to-XML)

// define the XML namespace of the <VerificationResponse> node and down
XNamespace wwwabc = "www.abc.com";

// parse your XML into a XDocument
XDocument xdoc = XDocument.Parse(your-xml-input);

// get the <StatusDescription> node(s) from the XDocument
// here I'm assuming there's only one such node, so I'm using
// the .FirstOrDefault() method to fetch it
var statusDescriptionNode = xdoc.Descendants(wwwabc + "StatusDescription").FirstOrDefault();

// if we found a first such node
if (statusDescriptionNode != null)
{
    string statusDescription = statusDescriptionNode.Value;
}

当然,如果这是一个非常庞大且复杂的XML,那么.Descendants()调用可能效率不高(它只是在整个XML文档中搜索该命名空间+节点名称的节点)。

答案 1 :(得分:0)

您的xml包含名称空间,使用XDocument可以按照以下方式获得所需的节点值:

 XDocument doc = XDocument.Parse(xml);

 XNamespace xmlNamespace = "www.abc.com";
 var ResultNode = from a in doc.Descendants(xmlNamespace + "VerificationResponse").Descendants(xmlNamespace + "StatusDescription")
                  select a.Value;

WORKING DOTNET FIDDLE