我想從namecheap沙箱api中提取信息,並找不到爲什麼我的linq查詢不工作。卡在基本的Linq到XML查詢
下面是一個示例回覆。
XML
<ApiResponse Status="OK" xmlns="http://api.namecheap.com/xml.response">
<Errors />
<Warnings />
<RequestedCommand>namecheap.domains.check</RequestedCommand>
<CommandResponse>
<DomainCheckResult Domain="google.com" Available="false" />
</CommandResponse>
<Server>WEB1-SANDBOX1</Server>
<GMTTimeDifference>--4:00</GMTTimeDifference>
<ExecutionTime>0.875</ExecutionTime>
</ApiResponse>
C#
var doc = XDocument.Load(url);
var response = (
from r in doc.Root.Descendants("ApiResponse")
where 1==1
select new {
Errors = r.Element("Errors").Value,
Warnings = r.Element("Warnings").Value,
RequestedCommand = r.Element("RequestedCommand").Value,
CommandResponse = r.Element("CommandResponse").Value,
Server = r.Element("Server").Value
}
);
我也試過這個查詢使用相同的文檔只是爲了看看一個簡單的例子工作。
var test = doc.Descendants("RequestedCommand").First().Value;
但都返回null。那麼我哪裏錯了?我最終需要了解CommandResponse中的頂級元素和更深層的元素。任何幫助,也將不勝感激。
UPDATE
由於喬恩的答覆中提到,這主要是與引用的各種元素時,沒有使用命名空間的問題。也使用doc.Elements()而不是doc.Root。後人()。
這是一個更新的工作版本。
XNamespace ns = "http://api.namecheap.com/xml.response";
var response = (
from r in doc.Elements()
select new
{
Errors = r.Element(ns + "Errors").Value,
Warnings = r.Element(ns + "Warnings").Value,
RequestedCommand = r.Element(ns + "RequestedCommand").Value,
CommandResponse = r.Element(ns + "CommandResponse").Value,
Server = r.Element(ns + "Server").Value
}
);
自認爲是整個文檔,應該用什麼來代替。後人? – Jerry
有沒有辦法爲所有的XDocument設置一個通用的命名空間,而不是在每個方法調用中使用它? – themarcuz
我也想得到一個迴應,因爲我看到的許多例子從來沒有參考命名空間,所以我不認爲它們是必需的。 – Jerry