Tôi đang phân tích cú pháp một chuỗi các phản hồi XML từ một kho lưu trữ dữ liệu ngoài. Trong thời gian đó tôi phải kiểm tra sự tồn tại của một nút con và - nếu nó tồn tại - hãy kiểm tra giá trị của nó. Để đạt được điều đó tôi có đoạn mã sau:Scala XML: kiểm tra sự tồn tại của nút và giá trị
...
val properties = for {
val row <- root \\ "ResultDescription"
val cond:Boolean = checkDetectionNode(row) match {
case Some(nodeseq) => {
val txt = nodeseq.text.toLowerCase
if (txt contains "non-detect")
false
else
true
}
case None => true
}
if (cond)
val name = (row \ "CharacteristicName").text
if (charNameList.exists(s => s == name) == false)
} yield {
getObservedProperty(name) match {
case Some(property) => {
charNameList = name :: charNameList
property
}
}
}
...
checkDetectionNode được định nghĩa như vậy:
private def checkDetectionNode(row: scala.xml.NodeSeq) : Option[scala.xml.NodeSeq] = {
if ((row \ "ResultDetectionConditionText") != null)
Some[scala.xml.NodeSeq]((row \ "ResultDetectionConditionText"))
else
None
}
Kết quả mã trên trong một lỗi không xác định "bắt đầu bất hợp pháp của biểu thức đơn giản" trên dòng val name...
. Thành thật mà nói tôi không phải là một lập trình viên Scala hoặc thậm chí là một lập trình viên chức năng (luôn luôn là một phần hơn để OO/mệnh lệnh). Tôi đã chỉ được sử dụng Scala cho một vài ngày và được dựa trên hầu hết những gì tôi biết từ các nhà khai thác Java và lambda. Thật không may, tôi không thực sự có thời gian để ngồi xuống và thực sự học Scala như tôi ước mình có thể. Thời hạn, làm cho kẻ ngu của tất cả chúng ta.
Tôi hy vọng rằng ai đó có thể xem và cho tôi biết nếu có điều gì đó tôi đang làm sai (như tôi chắc chắn có). Tôi đã cố gắng giới hạn mã hiển thị, những gì tôi hy vọng, có liên quan đến câu hỏi. Tuy nhiên, vui lòng cho tôi biết nếu có bất kỳ mã bổ sung nào là cần thiết.
Cảm ơn
Tôi đoán tôi nên nói rõ ràng rằng phần trên là một phần của sự hiểu biết về tuyên bố. 'If (cond)' được cho là để xác định việc thực hiện khối lợi nhuận. Tôi đã chỉnh sửa câu trả lời của mình để xây dựng thêm về mã. – Cowan