如何在 c# 中使用 XmlNodeList 获取 xml 元素值

本文关键字:获取 XmlNodeList xml 元素 | 更新日期: 2023-09-27 18:36:25

我需要存储节点"成员"内的元素值。我已经尝试了以下代码,但我无法实现它。如何获取值。任何帮助将不胜感激

.XML:

 <ListInventorySupplyResponse xmlns="http://mws.amazonaws.com/FulfillmentInventory/2010-10-01/">
  <ListInventorySupplyResult>
    <InventorySupplyList>
      <member>
        <SellerSKU>043859634910</SellerSKU>
        <FNSKU>X000IA4045</FNSKU>
        <ASIN>B005YV4DJO</ASIN>
        <Condition>NewItem</Condition>
        <TotalSupplyQuantity>7</TotalSupplyQuantity>
        <InStockSupplyQuantity>7</InStockSupplyQuantity>
        <EarliestAvailability>
          <TimepointType>Immediately</TimepointType>
        </EarliestAvailability>
        <SupplyDetail>
        </SupplyDetail>
      </member>
    </InventorySupplyList>
  </ListInventorySupplyResult>
  <ResponseMetadata>
    <RequestId>58c9f4f4-6f60-496a-8d71-8fe99ce301c9</RequestId>
  </ResponseMetadata>
</ListInventorySupplyResponse>

C# 代码:

string a = Convert.ToString(oInventorySupplyRes.ToXML());
 XmlDocument oXdoc = new XmlDocument();
 oXdoc.LoadXml(a);
 XmlNodeList oInventorySupplyListxml = oXdoc.SelectNodes("//member");
 foreach (XmlNode itmXml in oInventorySupplyListxml)
 {
    // var cond = itmXml.InnerXml.ToString();
     var asinVal = itmXml.SelectSingleNode("ASIN").Value;
     var TotalSupplyQuantityVal = itmXml.SelectSingleNode("TotalSupplyQuantity").Value;
 }

结果查看: "Enumeration yielded no results" and count = 0;

编辑 1:

 string a = Convert.ToString(oInventorySupplyRes.ToXML());
                var status = oInventorySupplyResult.InventorySupplyList;
                XmlDocument oXdoc = new XmlDocument();
                var doc = XDocument.Parse(a);
                var r = doc.Descendants("member")
                           .Select(member => new
                           {
                               ASIN = member.Element("ASIN").Value,
                               TotalSupplyQuantity = member.Element("TotalSupplyQuantity").Value
                           });

如何在 c# 中使用 XmlNodeList 获取 xml 元素值

private string mStrXMLStk = Application.StartupPath + "''Path.xml";
private System.Xml.XmlDocument mXDoc = new XmlDocument();
mXDoc.Load(mStrXMLStk);
XmlNode XNode = mXDoc.SelectSingleNode("/ListInventorySupplyResult/InventorySupplyList/member");
if (XNode != null)
{
   int IntChildCount = XNode.ChildNodes.Count;
   for (int IntI = 1; IntI <= IntChildCount ; IntI++)
   {
        string LocalName = XNode.ChildNodes[IntI].LocalName;
        XmlNode Node = mXDoc.SelectSingleNode("/Response/" + LocalName);
        // Store Value in Array assign value by "Node.InnerText"
   }
}

试试这个Code。它的工作

尝试使用此 XPath

string xPath ="ListInventorySupplyResponse/ListInventorySupplyResult
           /InventorySupplyList/member"
XmlNodeList oInventorySupplyListxml = oXdoc.SelectNodes(xpath);

当您执行"//member" 时,代码会尝试从根级别查找名为 member 的元素,该元素不存在于根级别,而是嵌套在几层下。

我认为这会对你有所帮助。

 string a = Convert.ToString(oInventorySupplyRes.ToXML());
 XmlDocument oXdoc = new XmlDocument();
 oXdoc.LoadXml(a);
 XmlNodeList fromselectors;
 XmlNodeList toselectors;
 XmlElement root = oXdoc.DocumentElement;
 fromselectors = root.SelectNodes("ListInventorySupplyResult/InventorySupplyList/member/ASIN");
 toselectors = root.SelectNodes("ListInventorySupplyResult/InventorySupplyList/member/TotalSupplyQuantity");
foreach (XmlNode m in fromselectors)
   {
      you will have value in `m.InnerXml` use it whereever you want..
   }
foreach (XmlNode n in toselectors)
   {
      you will have value in `n.InnerXml` use it whereever you want..
   }