Tôi hình tôi đang nhìn một cái gì đó đơn giản, nhưng tôi đang gặp khó khăn khi trích xuất các nút từ một XDocument đệ quy.Tìm các nút đệ quy trong một XDocument
Tôi có XML tương tự như sau:
<?xml version="1.0" encoding="iso-8859-1"?>
<content>
<operation></operation>
<entry>
<observation>
<templateId/>
<code></code>
<value></value>
<entryRelationship>
<observation>
<templateId/>
<code></code>
<value></value>
</observation>
</entryRelationship>
<entryRelationship>
<observation>
<templateId/>
<code></code>
<value></value>
</observation>
</entryRelationship>
</observation>
</entry>
</content>
tôi nghĩ rằng tôi có thể nhận được tất cả các nút ba quan sát sử dụng
foreach (XElement element in Content.Descendants("observation"))
ExamineObservation(element);
Mặc dù nó trông giống như tác phẩm chỉ này khi quan sát không có con. Tôi cũng đã thử .Ancestors và .DecentantNodes, nhưng không nhận được những gì tôi muốn.
Tôi có thể dễ dàng viết một phương pháp đệ quy giúp tôi những gì tôi cần, nhưng tôi muốn sử dụng một phương pháp hiện có nếu có, đặc biệt vì tôi sẽ làm việc với XML khá nhiều trong một số dự án. Tôi có thiếu một cái gì đó hiển nhiên?
Lưu ý rằng bất kỳ nút nào nói rằng quan sát, tôi sẽ cần lấy mã và giá trị từ, vì vậy trong ví dụ bên dưới, tôi sẽ cần xử lý ba nút quan sát. Tổ và số lượng các nút quan sát là tùy ý.
Cảm ơn bạn đã hỗ trợ.
PHỤ LỤC
Nó xảy ra với tôi rằng tôi có thể không được đưa ra đầy đủ thông tin về XML. Tôi không nghĩ rằng thẻ sẽ tạo ra sự khác biệt, nhưng tôi cho rằng tôi nên đưa chúng vào trường hợp. Dưới đây là một số dòng đầu tiên của một thông điệp thực tế mà tôi đang cố gắng phân tích cú pháp. Tôi đã thay thế một số văn bản bằng "..." để bảo mật.
<?xml version="1.0" encoding="iso-8859-1"?>
<content xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<operation>update</operation>
<entry xmlns="urn:hl7-org:v3">
<observation classCode="OBS" moodCode="EVN">
<templateId root="..." />
<code code="..." codeSystem="..." codeSystemName="..." displayName="...">
</code>
<value xsi:type="..." code="..." codeSystem="..." codeSystemName="..." displayName="...">
</value>
<entryRelationship typeCode="...">
<observation classCode="..." moodCode="...">
Xin lỗi tôi không thể bắt những gì là sai ở đây, nếu bạn viết 'Console.WriteLine (element.Element ("code")); 'trong foreach của bạn, bạn sẽ nhận được ba mã như mong đợi –
No. Tôi theo dõi điều này, và tôi không nhận được gì. Nó hoàn toàn bỏ qua quá khứ ExamineObservation (phần tử). Xml đang sử dụng một không gian tên; điều đó có tạo nên sự khác biệt không? – Tim
Đồng ý với xeondev, điều này sẽ hoạt động. Bạn đang khởi tạo nút 'Content' của bạn trong vòng lặp foreach như thế nào? – Gjeltema