使用 XML 中的父节点获取子节点值
Get Child Node value using parent Node in XML
如何使用父标签名称获取节点的值。
这是我的 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>
如何获取商品价格金额和运费金额。
到目前为止我已经试过了..
方法一:
XmlNode node12 = xd1.SelectSingleNode("/ListOrderItemsResponse[@*]/ListOrderItemsResult/OrderItems/OrderItem/ItemPrice");
string id = node12["Amount"].InnerText;
方法二:
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。
有什么建议吗??
这是默认命名空间的经典问题。您的 XML 在根元素处声明了默认命名空间:
xmlns="https://mws.amazonservices.com/Orders/2013-09-01"
所有没有前缀的元素都被认为在上面提到的默认命名空间中。对于命名空间中的 select 元素,您需要使用 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;
使用第二种方法,您可以使用 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);
}
}
}
希望对您有所帮助
如何使用父标签名称获取节点的值。
这是我的 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>
如何获取商品价格金额和运费金额。
到目前为止我已经试过了..
方法一:
XmlNode node12 = xd1.SelectSingleNode("/ListOrderItemsResponse[@*]/ListOrderItemsResult/OrderItems/OrderItem/ItemPrice");
string id = node12["Amount"].InnerText;
方法二:
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。
有什么建议吗??
这是默认命名空间的经典问题。您的 XML 在根元素处声明了默认命名空间:
xmlns="https://mws.amazonservices.com/Orders/2013-09-01"
所有没有前缀的元素都被认为在上面提到的默认命名空间中。对于命名空间中的 select 元素,您需要使用 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;
使用第二种方法,您可以使用 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);
}
}
}
希望对您有所帮助