LINQ to XMLを利用したデータ取得
LINQ"de"XML@HL7
対象
- HL7形式のデータをC#でごりっとよみこみ、DBに突っ込みたい。
- XMLを読み込みたいだけ。
- C#大好きです
上記の人に向けての記事です。
つたないところがあるかと思いますが、間違っていたらコメントにてフォローアップお願いします。
HL7とは?
簡単にいうと、医療情報(健診検査の情報や患者情報、予約だったり、いくら払ったかとか…)を扱う標準規格です。
アメリカ主導の規格ですが、日本でも特定健康診査で行った検査結果を国へ提出する際に利用されるなど、今後も利用拡大が想定される規格です。
ただのXMLではありますが、たとえばこんな感じに記載されています。
<?xml version="1.0" encoding="utf-8"?>
<ClinicalDocument xmlns="urn:hl7-org:v3" xsi:schemaLocation="urn:hl7-org:v3 ../XSD/hc08_V08.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<typeId root="2.16.840.1.113883.1.3" extension="POCD_HD000040" />
<id nullFlavor="NI" />
<code code="10" codeSystem="1.2.392.200119.6.1001" />
<effectiveTime value="20130930" />
<confidentialityCode code="N" />
中略
<entry>
<observation classCode="OBS" moodCode="EVN">
<code code="9N006000000000001" displayName="体重" />
<value xsi:type="PQ" value="85.0" unit="kg" />
</observation>
</entry>
<entry>
<observation classCode="OBS" moodCode="EVN">
<code code="9N011000000000001" displayName="BMI" />
<value xsi:type="PQ" value="29.6" unit="kg/m2" />
<interpretationCode code="H" />
<referenceRange>
<observationRange classCode="OBS" moodCode="EVN.CRT">
<value xsi:type="IVL_PQ">
<high value="24.9" unit="kg/m2" />
</value>
</observationRange>
</referenceRange>
</observation>
</entry>
(あとはentryタグの繰り返し)
とりあえずこんなかんじ。
本題にはいりましょ。
LINQ to XMLなんて仰々しい感じで名前はついていますが、所詮はLINQ。
そんなに難しい話ではありません。
本来であれば、XSDをつかって簡単にデータ化できればよかったのですが、
それがXSDが壊れていることがあり、うまくいかなかったのです。ガッテム。
ということで、
System.IO.StreamReader sr = new System.IO.StreamReader(strFile);
XElement elem = XElement.Load(strFile);
var xdoc = XDocument.Load(strFile);
XNamespace ex = "urn:hl7-org:v3";
// 検査結果エレメント
IEnumerable<XElement> q = from n in xdoc.Descendants(ex + "observation")
select n;
foreach (var ee in q)
{
value = "";
// 検査内容(コード、検査項目名)
IEnumerable<XElement> s = from n in ee.Descendants(ex + "code")
select n;
// 検査結果()
IEnumerable<XElement> t = from n in ee.Descendants(ex + "value")
select n;
}
Valueがくるくるっととってこれるようになります。
ほんとうに本当にメモ程度の備忘録ですが、こんなかんじです。
Author And Source
この問題について(LINQ to XMLを利用したデータ取得), 我々は、より多くの情報をここで見つけました https://qiita.com/takanasun/items/05b017395fac16541f2a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .