Lý do cho Lỗi
Theo thông báo lỗi, .SelectNodes()
đòi hỏi rằng các tham số xpath
chuỗi để đánh giá một bộ nút, ví dụ xpath này sẽ trả về một XmlNodeList
chứa 3 nút:
var nodeSet = document.SelectNodes("/altinkaynak/DOVIZ");
Cung cấp một xpath
mà trả về một nút duy nhất cũng là chấp nhận được - sự trở lại XmlNodeList
sẽ chỉ có một nút duy nhất:
var nodeSet = document.SelectNodes("(/altinkaynak/DOVIZ)[1]");
Tuy nhiên, nó là không thể trả lại các giá trị không phải nút, chẳng hạn như biểu thức vô hướng:
var nodeSet = document.SelectNodes("count(/altinkaynak/DOVIZ)");
Error: Expression must evaluate to a node-set.
Thay vì cho XmlDocument
, bạn sẽ cần phải tạo ra một hoa tiêu, biên dịch một biểu thức, và đánh giá nó:
var navigator = document.CreateNavigator();
var expr = navigator.Compile("count(/altinkaynak/DOVIZ)");
var count = navigator.Evaluate(expr); // 3 (nodes)
Nếu bạn chuyển Xml của bạn phân tích cú pháp ngăn xếp từ việc sử dụng XmlDocument
đến một Linq to Xml
XDocument
có một much more concise way để đánh giá biểu thức vô hướng:
var count = xele.XPathEvaluate("count(/altinkaynak/DOVIZ)");
Badly hình thành XPath
lỗi tương tự này (Expression must evaluate to a node-set
) cũng thường được trả về cho xpath
s mà không có giá trị hoàn toàn
var nodeSet = document.SelectNodes("{Insert some really badly formed xpath here!}");
Error: Expression must evaluate to a node-set.
OP của Câu hỏi
Bạn có một lỗi trong XPath của bạn. Những gì bạn có thể muốn là thế này:
doc.SelectNodes("//ALTINKAYNAK/DOVIZ[ADI='" + dovizKuru2 + "']/ALIS") // ...
đó sẽ trả lại con ALIS
của phần tử DOVIZ
trong đó có một con ADI
với một giá trị của dovizKuru2
(mà có lẽ là một biến cho tệ như USD
)
nó công trinh. cảm ơn bạn. – ofince
Trên thực tế 'Một số/Thực sự = xấu [@ hình thành = 'xpath']' là cú pháp hợp lệ và trả về một boolean. Nếu bạn thay thế nó bằng 'A/B = C [@ X = 3]' bạn có thể thấy rằng nó có ý nghĩa hoàn hảo. –
Cảm ơn @MichaelKay - đã cập nhật – StuartLC