【问题标题】:Reading NodeType Value of xml file读取xml文件的NodeType值
【发布时间】:2020-09-18 21:06:19
【问题描述】:

我有一个这样的 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# 代码读取每个标签的值。我正在使用 XmlTextReader 来解析 XML 文件。使用下面的完整代码进行更新。

using System;
using System.Xml;

namespace democonsole
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlTextReader xtr = new XmlTextReader("");

            while (xtr.Read())
          {
            
            if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "City")
            {
              string s7 = xtr.ReadElementContentAsString();
              Console.WriteLine("City ="+s7);
            }
             if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "Type")
            {
              {
                  string s8 = xtr.ReadElementContentAsString();
                  xtr.ReadToFollowing("Amount");
                  decimal amount = xtr.ReadElementContentAsDecimal();
                  Console.WriteLine("Tax =" + amount);
              } 
            }

          }
        }
    }
}```


使用下面的代码,我试图只获取税额,但也继续提取“本金”金额。我会附上一张照片以供参考。

如何只显示税额?感谢您对新手的任何帮助!

VSC -Output

【问题讨论】:

  • 你必须找到一个名为ElementComponent 然后做一些诡计以获得价值。能否提供一个稍微完整一点的源代码,以便我们进行快速调试?
  • 感谢 Efthymios 查看我的问题。我已经更新了完整的源代码以便快速调试。
  • 这能回答你的问题吗? Reading xml child tag value
  • Alexander,是的,它解决了问题,但它也拉低了本金价格。点击上面的“VSC-Output链接-我不知道如何只得到税价。谢谢你的帮助。

标签: c# xmlnode


【解决方案1】:

不确定是什么问题,但上述 cmets 中的 Alexander 已经为此提供了解决方案。上一篇文章的链接(Reading xml child tag value)。

我只是将这 2 个程序合并并进行了一些小改动,以便您可以分别标记税额和本金金额。这看起来像:

XmlTextReader xtr = new XmlTextReader("xml.txt");

while (xtr.Read())
{

    if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "City")
    {
        string s7 = xtr.ReadElementContentAsString();
        Console.WriteLine("City =" + s7);
    }

    if (xtr.NodeType == XmlNodeType.Element && xtr.Name == "Component")
    {
        xtr.ReadToFollowing("Type");

        string s8 = xtr.ReadElementContentAsString();
        if (s8 == "Tax")
        {
            xtr.ReadToFollowing("Amount");
            decimal amount = xtr.ReadElementContentAsDecimal();
            Console.WriteLine("Tax Amount =" + amount);
        }
        else if (s8 == "Principal")
        {
            xtr.ReadToFollowing("Amount");
            decimal amount = xtr.ReadElementContentAsDecimal();
            Console.WriteLine("Principal Amount =" + amount);
        }
    }
}

你会看到最终的结果是:

City =SAN JOSE
Principal Amount =14.98
Tax Amount =1.39

【讨论】:

  • 谢谢,Efthymios!这解决了我的问题,我错过了“else if”语句。感谢您的所有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 2013-05-28
  • 2016-06-20
  • 1970-01-01
相关资源
最近更新 更多