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

时间:2019-05-26 10:11:19

标签: c# asp.net xml xmlnode

如何基于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获取产品链接“ OWN”的值。

我尝试了以下代码,但是它没有从“产品链接”节点返回值“ OWN”。

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

2 个答案:

答案 0 :(得分:1)

尝试

_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

答案 1 :(得分:1)

您确实必须添加代码以在此处获取元素的属性值,可能要注意未找到正确元素的情况。另外,在xpath表达式和XML中都要小心元素名称。

以下测试代码的链接变量中将包含“ 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"}");