Чтение значения дочернего тега xml

Мой xml-файл выглядит следующим образом.

<?xml version="1.0" encoding="UTF-8"?>
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
 <DocumentVersion>1.00</DocumentVersion>
 </Header>
<MessageType>AllOrdersReport</MessageType>
<Message>
     <Order>
      <OrderID>14-7005-04201</OrderID>
      <MerchantOrderID>14-7005-04201</MerchantOrderID>
      <PurchaseDate>2020-07-28T02:32:38+00:00</PurchaseDate>
      <LastUpdatedDate>2020-07-28T14:58:07+00:00</LastUpdatedDate>
      <OrderStatus>Shipped</OrderStatus>
      <SalesChannel>Amazon.com</SalesChannel>
      <FulfillmentData>
         <FulfillmentChannel>Amazon</FulfillmentChannel>
         <ShipServiceLevel>Expedited</ShipServiceLevel>
         <Address>
            <City>SAN JOSE</City>
            <State>CA</State>
            <PostalCode>95129-3137</PostalCode>
            <Country>US</Country>
         </Address>
     </FulfillmentData>
     <IsBusinessOrder>false</IsBusinessOrder>
     <OrderItem>
        <AmazonOrderItemCode>4494901738</AmazonOrderItemCode>
        <ASIN>B0N1QG</ASIN>
        <SKU>CH-4219</SKU>
        <ItemStatus>Shipped</ItemStatus>
        <ProductName>Drawing Pad</ProductName>
        <Quantity>1</Quantity>
        <ItemPrice>
           <Component>
              <Type>Principal</Type>
              <Amount currency="USD">14.98</Amount>
           </Component>
           <Component>
              <Type>Tax</Type>
              <Amount currency="USD">1.39</Amount>
           </Component>
        </ItemPrice>
     </OrderItem>
  </Order>
</Message>
</AmazonEnvelope>

Код C# для чтения значения каждого тега.



while (xtr.Read())
          {
            if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "AmazonOrderID")
            {
              string s1 = xtr.ReadElementContentAsString();
              Console.WriteLine("AmazonOrderID ="+s1);
            }
            if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "PurchaseDate")
            {
              string s2 = xtr.ReadElementContentAsString();
              Console.WriteLine("PurchaseDate ="+s2);
            }
            
            if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "State")
            {
              string s3 = xtr.ReadElementContentAsString();
              Console.WriteLine("State ="+s3);
            }
            if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "ProductName")
            {
              string s4 = xtr.ReadElementContentAsString();
              Console.WriteLine("ProductName ="+s4);
            }
            if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "Quantity")
            {
              string s5 = xtr.ReadElementContentAsString();
              Console.WriteLine("Quantity ="+s5);
            }
            if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "PostalCode")
            {
              string s6 = xtr.ReadElementContentAsString();
              Console.WriteLine("PostalCode ="+s6);
            }
            if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "City")
            {
              string s7 = xtr.ReadElementContentAsString();
              Console.WriteLine("City ="+s7);
            }
             if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "Tax")
            {
              string s8 = xtr.ReadElementContentAsString();
              Console.WriteLine("Tax ="+s8);
            }
          
            
          }
        }    
    }
}

С помощью приведенного выше кода я могу перебирать все элементы тега. Но я не могу прочитать значение налогового тега. Как мне прочитать значение налогового тега, чтобы получить сумму в 1,39 доллара США?

Спасибо за любую помощь в выяснении того, как перебирать строку Tax.


person steve    schedule 16.09.2020    source источник
comment
Вопрос не плохой, но задан плохо. Как говорится: ведите с заголовком. Часть о нахождении суммы налога должна быть вверху; не после страниц кода. ... также, судя по вашему комментарию, вам нравится ответ. Отметьте его как принятый.   -  person steve    schedule 17.09.2020


Ответы (1)


Налог не является именем элемента. Это значение узла Type.

Итак, вам нужно найти узел Type со значением Tax. Затем найдите сумму и прочитайте ее.

if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "Type")
{
    string s8 = xtr.ReadElementContentAsString();
    if (s8 == "Tax")
    {
        xtr.ReadToFollowing("Amount");
        decimal amount = xtr.ReadElementContentAsDecimal();
        Console.WriteLine("Tax =" + amount);
    }
}
person Alexander Petrov    schedule 16.09.2020
comment
Александр, Спасибо большое! Эта работа идеально подходит для моего проекта. - person steve; 17.09.2020