8

単純なものを見落としていると思いますが、XDocument からノードを再帰的に抽出するのが困難です。

私はこれに似たXMLを持っています:

<?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>

を使用して3つの観測ノードすべてを取得できると思いました

foreach (XElement element in Content.Descendants("observation"))
    ExamineObservation(element);

これは、観測に子がない場合にのみ機能するように見えますが。.Ancestors と .DecentantNodes も試しましたが、望みどおりの結果が得られませんでした。

必要なものを取得する再帰メソッドを簡単に作成できますが、特に複数のプロジェクトで XML をかなり扱うことになるため、既存のメソッドがあればそれを使用します。明らかな何かが欠けていますか?

観察を示すノードは、コードと値を取得する必要があることに注意してください。したがって、以下の例では、3 つの観察ノードを処理する必要があります。観測ノードの入れ子と数は任意です。

ご協力ありがとうございます。

補遺

XML について十分な情報を提供していない可能性があることに気づきました。タグで違いがあるとは思いませんでしたが、念のため含めておくべきだと思います。以下は、解析しようとしている実際のメッセージの最初の数行です。プライバシーのため、一部のテキストを「...」に置き換えました。

<?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="...">
4

1 に答える 1