【问题标题】:Reading xml document with several nodes读取具有多个节点的 xml 文档
【发布时间】:2015-10-24 14:27:21
【问题描述】:

我之前使用过以下代码,但这次我的xml不同:

protected string ReturnXmlValue(XmlDocument myXDoc, string field)
{
  var retval = string.Empty;


  try
  {
    var node = myXDoc.GetElementsByTagName(field);
    if (node.Count > 0)
    {
      var xmlNode = node.Item(0);
      if (xmlNode != null)
      {
        retval = xmlNode.InnerText;
      }
    }
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.ToString());
    throw;
  }

  return retval;
}

这是我的 xml 文件的示例:

<RichDBDS>
  <TrxDetailCard>
    <TRX_HD_Key>18683435</TRX_HD_Key>
    <Date_DT>2015-10-22T21:32:00.233+00:00</Date_DT>
    <TRX_Card_Key>15263569</TRX_Card_Key>
    <Total_Amt_MN>22.0000</Total_Amt_MN>
    <Result_CH>0    </Result_CH>
    <Result_Txt_VC>APPROVED</Result_Txt_VC>
    <Approval_Code_CH>0943253</Approval_Code_CH>
  </TrxDetailCard>
  <TrxDetailCard>
    <TRX_HD_Key>18683825</TRX_HD_Key>
    <Date_DT>2015-10-23T21:32:00.233+00:00</Date_DT>
    <TRX_Card_Key>15263569</TRX_Card_Key>
    <Total_Amt_MN>32.0000</Total_Amt_MN>
    <Result_CH>0    </Result_CH>
    <Result_Txt_VC>APPROVED</Result_Txt_VC>
    <Approval_Code_CH>093389</Approval_Code_CH>
  </TrxDetailCard>
</RichDBDS>

我没有经常使用 xml,所以我不确定如何搜索特定数量。我可以有几个 TrxDetailCards。当我只有一张 TrxDetailCard 时,我知道如何获取金额,但我需要返回 TrxDetailCard 以获取我需要的金额。

所以如果我正在寻找 32.00 的 TrxDetailCard,我需要返回的方法:

  <TrxDetailCard>
    <TRX_HD_Key>18683825</TRX_HD_Key>
    <Date_DT>2015-10-23T21:32:00.233+00:00</Date_DT>
    <TRX_Card_Key>15263569</TRX_Card_Key>
    <Total_Amt_MN>32.0000</Total_Amt_MN>
    <Result_CH>0    </Result_CH>
    <Result_Txt_VC>APPROVED</Result_Txt_VC>
    <Approval_Code_CH>093389</Approval_Code_CH>
  </TrxDetailCard>

我该怎么做呢?

【问题讨论】:

    标签: c# xml xmldocument


    【解决方案1】:

    试试这个

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Linq;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string xml =
                    "<RichDBDS>" +
                      "<TrxDetailCard>" +
                        "<TRX_HD_Key>18683435</TRX_HD_Key>" +
                        "<Date_DT>2015-10-22T21:32:00.233+00:00</Date_DT>" +
                        "<TRX_Card_Key>15263569</TRX_Card_Key>" +
                        "<Total_Amt_MN>22.0000</Total_Amt_MN>" +
                        "<Result_CH>0    </Result_CH>" +
                        "<Result_Txt_VC>APPROVED</Result_Txt_VC>" +
                        "<Approval_Code_CH>0943253</Approval_Code_CH>" +
                      "</TrxDetailCard>" +
                      "<TrxDetailCard>" +
                        "<TRX_HD_Key>18683825</TRX_HD_Key>" +
                        "<Date_DT>2015-10-23T21:32:00.233+00:00</Date_DT>" +
                        "<TRX_Card_Key>15263569</TRX_Card_Key>" +
                        "<Total_Amt_MN>32.0000</Total_Amt_MN>" +
                        "<Result_CH>0    </Result_CH>" +
                        "<Result_Txt_VC>APPROVED</Result_Txt_VC>" +
                        "<Approval_Code_CH>093389</Approval_Code_CH>" +
                      "</TrxDetailCard>" +
                    "</RichDBDS>";
    
                XElement richDBDS = XElement.Parse(xml);
                XElement results = richDBDS.Elements("TrxDetailCard").Where(x => (decimal)x.Element("Total_Amt_MN") == (decimal)32.0000).FirstOrDefault();
     
            }
        }
    }
    ​

    【讨论】:

      【解决方案2】:

      您可以使用Linq-to-Xml

      var str = File.ReadAllText(@"C:\YourDirectory\sample.xml");
      XDocument xDoc = XDocument.Parse(str);
      
      var trxNodes = xDoc.Descendants("TrxDetailCard");
      var node = trxNodes.First(n => double.Parse(n.Element("Total_Amt_MN").Value) == 32.00);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-12
        相关资源
        最近更新 更多