如何根据属性值c#获取xml节点值,asp.net?

How to get xml node value based on attribute value c# , asp.net?

如何在 C# 中根据属性值获取 xmlnode 值。

<Products>
  <Error>0</Error>
  <Product link="OWN">
    <ProductCode>CA</ProductCode>
    <ProductType>Account</ProductType>
    <ProductSubtype>Current Account</ProductSubtype>
    <ProductDescriptionEng>Current Account</ProductDescriptionEng>  
    <ProductNumber>1234567</ProductNumber>
    <ProductCurrency></ProductCurrency>
    <ProductCurrencyCode>01</ProductCurrencyCode>
    <ProductBalance>899293.003</ProductBalance>
    <LoanRef></LoanRef>
    <OldLoanRef></OldLoanRef>
    <ProductStandardID>00010001</ProductStandardID>
    <OldLoanRef></OldLoanRef>  
    <ProductStatusCode>00</ProductStatusCode>
    <ProductStatus>OPEN</ProductStatus>
    <ProductCategory>Deposit Account</ProductCategory>   
  </Product>
</Product>

在上面的示例中,我想根据传递的属性值 (1234567) 1234567 获取 Product Link "OWN" 的值。

我尝试了以下代码,但它没有从“产品 link”节点中 return 值 "OWN"。

string _accountsXml = GetProducts();
                _xmlDoc.LoadXml(_accountsXml);
                _productLinkType = _xmlDoc.SelectSingleNode(string.Format("//Products[../ProductNumber = '{0}']", prodNumber));

试试这个

_productLinkType = _xmlDoc.SelectSingleNode(string.Format("//Products[..//ProductNumber = '{0}']", prodNumber));

var xDoc = XDocument.Load(_accountsXml);
var productLinkType = xDoc.XPathSelectElement(string.Format("//Products[..//ProductNumber = '{0}']", prodNumber)).Element("Product").Attribute("link").Value;

您示例中的结束标记是 Product,它应该是 Products

您必须添加代码才能在此处获取元素的属性值,可能会注意到找不到正确元素的情况。还要注意元素名称 - 在 xpath 表达式和 XML.

以下测试代码将在 link 变量中包含 "OWN":

var doc = XDocument.Parse(@"<?xml version=""1.0""?>  
<Products>
    <Error>0</Error>
    <Product link=""Global""/>
    <Product link=""OWN"">
        <Some/>
        <ProductNumber>1234567</ProductNumber>
        <Nodes/>
    </Product>
    <Product link=""External"">
        <ProductNumber>777</ProductNumber>
    </Product>
</Products>");

var id = 1234567;
var link = doc
    .XPathSelectElement($"//Product[ProductNumber = '{id}']")
    ?.Attribute("link")
    ?.Value;

Console.WriteLine($"Product link: {link ?? "not found"}");