C# 使用XmlDocument获取xml值
我想从以下XML示例节点获取UPC值,但当前doc.SelectNodes无法获取该值。我正在使用XmlDocument来处理我的XML。你能修改我的代码来获取UPC值吗?我做错了什么 C代码:C# 使用XmlDocument获取xml值,c#,xml,xmldocument,C#,Xml,Xmldocument,我想从以下XML示例节点获取UPC值,但当前doc.SelectNodes无法获取该值。我正在使用XmlDocument来处理我的XML。你能修改我的代码来获取UPC值吗?我做错了什么 C代码: string responseStr = new StreamReader(responseStream).ReadToEnd(); responseStream.Flush(); responseStream.Close(); XmlDocument doc = new XmlDocument();
string responseStr = new StreamReader(responseStream).ReadToEnd();
responseStream.Flush();
responseStream.Close();
XmlDocument doc = new XmlDocument();
doc.LoadXml(responseStr);
if (doc.GetElementsByTagName("Ack").Item(0).InnerText != "Failure")
{
string UPC = doc.SelectNodes("Item").Item(0).SelectNodes("UPC").Item(0).InnerText;
}
XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<GetItemResponse xmlns="urn:ebay:apis:eBLBaseComponents">
<Timestamp>2018-07-28T08:18:10.048Z</Timestamp>
<Ack>Success</Ack>
<Version>1069</Version>
<Build>E1069_CORE_API_18748854_R1</Build>
<Item>
<ProductListingDetails>
<ISBN>Not Applicable</ISBN>
<UPC>853365007036</UPC>
<EAN>0853365007036</EAN>
<BrandMPN>
<Brand>UpCart</Brand>
<MPN>MPCB-1DX</MPN>
</BrandMPN>
<IncludeeBayProductDetails>true</IncludeeBayProductDetails>
</ProductListingDetails>
</Item>
</GetItemResponse>
您有一个必须用于获取值的命名空间。以下是使用xml linq的简单方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XNamespace ns = doc.Root.GetDefaultNamespace();
string UPC = (string)doc.Descendants(ns + "UPC").FirstOrDefault();
}
}
}
如果有空值,请使用此
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XNamespace ns = doc.Root.GetDefaultNamespace();
var upcs = doc.Descendants(ns + "UPC");
if (upcs != null)
{
string upc = (string)upcs.FirstOrDefault();
}
}
}
}
您可以选择任何其他值吗?我是说从另一个节点?不,它表示我选择的内容不可用。您需要在对SelectNodes的调用中指定正确的命名空间,即urn:ebay:api:eblbbaseComponents。请参见和。以上所有内容均为正确的。还有下面的答案。但为什么要像使用Ack时那样使用SelectNodes而不是GetElementsByTagName?doc不包含根的定义。您使用的是旧的XmlDocument。我正在使用XDocument,它是新的msdn库。看看我的代码中的标题。好的,但是你会在我的代码中看到我也使用了if条件。那么我如何将其转换为您的XDoc版本?ifdoc.GetElementsByTagNameAck.Item0.InnerText!=失败{}