如何使用父标记名称获取节点的值。
这是我的XML格式。
<ListOrderItemsResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01">
<ListOrderItemsResult>
<AmazonOrderId>Order Id</AmazonOrderId>
<OrderItems>
<OrderItem>
<ASIN>Asin Value</ASIN>
<SellerSKU>SKU</SellerSKU>
<OrderItemId>SKU Value</OrderItemId>
<Title>Product Title</Title>
<QuantityOrdered>1</QuantityOrdered>
<QuantityShipped>0</QuantityShipped>
<ItemPrice>
<CurrencyCode>INR</CurrencyCode>
<Amount>30.00</Amount>
</ItemPrice>
<ShippingPrice>
<CurrencyCode>INR</CurrencyCode>
<Amount>5.00</Amount>
</ShippingPrice>
</OrderItem>
</OrderItems>
</ListOrderItemsResult>
如何获得物品价格金额和运输价格金额。
到目前为止,我试过了..
方法1:
XmlNode node12 = xd1.SelectSingleNode("/ListOrderItemsResponse[@*]/ListOrderItemsResult/OrderItems/OrderItem/ItemPrice");
string id = node12["Amount"].InnerText;
方法2:
int i = 0;
XmlNodeList nodeAMT = xd1.GetElementsByTagName("Amount");
string[] AMT = new string[TotalCount];
foreach (XmlElement node in nodeAMT)
{
AMT[i] = node.InnerText;
i++;
}
如何获取ItemPrice 30和ShippingPrice 5.
任何建议??
答案 0 :(得分:2)
这是默认命名空间的经典问题。您的XML在根元素处声明了默认名称空间:
xmlns="https://mws.amazonservices.com/Orders/2013-09-01"
在上述默认命名空间中考虑所有没有前缀的元素。要在命名空间中选择元素,您需要使用XmlNamespaceManager
:
var nsmgr = new XmlNamespaceManager(new NameTable());
//register mapping of prefix to namespace uri
nsmgr.AddNamespace("d", "https://mws.amazonservices.com/Orders/2013-09-01");
string query = "/d:ListOrderItemsResponse/d:ListOrderItemsResult/d:OrderItems/d:OrderItem/d:ItemPrice/d:Amount";
XmlNode node = xd1.SelectSingleNode(query, nsmgr);
string itemPrice = node.InnerText;
答案 1 :(得分:1)
使用第二种方法,您可以使用XmlElement Parent属性来获取父级的名称。
XmlNodeList amounts = xml.GetElementsByTagName("Amount");
foreach (XmlElement amount in amounts)
{
if (amount.ParentNode != null)
{
if (amount.ParentNode.Name.Equals("ItemPrice"))
{
Console.WriteLine("Item Price"+amount.InnerText);
}
if (amount.ParentNode.Name.Equals("ShippingPrice"))
{
Console.WriteLine("Shipping Price" + amount.InnerText);
}
}
}
我希望这可以帮到你。