C# 使用XML中的父节点获取子节点值
如何使用父标记名获取节点的值 这是我的XML格式C# 使用XML中的父节点获取子节点值,c#,xml,default-namespace,C#,Xml,Default Namespace,如何使用父标记名获取节点的值 这是我的XML格式 <ListOrderItemsResponse xmlns="https://mws.amazonservices.com/Orders/2013-09-01"> <ListOrderItemsResult> <AmazonOrderId>Order Id</AmazonOrderId> <OrderItems> <OrderItem> <AS
<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>
方法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
任何建议???这是默认名称空间的经典问题。您的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;
这是默认名称空间的一个经典问题。您的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;
使用第二种方法,您可以使用XmlElement父属性来获取父对象的名称
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);
}
}
}
我希望这能对您有所帮助。对于第二种方法,您可以使用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);
}
}
}
我希望这能对您有所帮助。我得到一个错误:需要名称空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数。在XmlNode node=xd1中,选择SingleNode(查询)lineoops。。忘记将命名空间管理器传递给XPath中字符串itemPrice=node.InnerText.Remove属性谓词
[@*]
中的SelectSingleNode()
对象引用错误。根元素没有属性,只有名称空间声明。我确信现在应该可以工作了,请参阅演示:我得到错误:需要名称空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数。在XmlNode node=xd1中,选择SingleNode(查询)lineoops。。忘记将命名空间管理器传递给XPath中字符串itemPrice=node.InnerText.Remove属性谓词[@*]
中的SelectSingleNode()
对象引用错误。根元素没有属性,只有名称空间声明。我相信现在应该可以了,请看演示:您也可以使用LINQtoXML试试这个,您也可以使用LINQtoXML试试这个