このブログ「吟遊詩人の戯言」 の記事検索...
1 2

【C#】XmlDocument.CreateElement()を使うとPrefixを出力しない不具合があるらしい

関連記事








いや,相変わらずのCLAIMの実装作業
っていうか,テスト工程に入っているんじゃけど

 
 
 
 

【Delphi】IXMLDOMNodeのノード追跡用コードのサンプル

関連記事




必要に迫られて,書き起こしてみた

悔いは無い(爆

また,どっかでこの手の追っかけ部,実装作業があったときの
自分自身のサンプル用に

次はC#辺りで,やりそう


なお,どことなく,ORCA~Claimの香りがするのは気のせいではない(笑

//**********************************************
//指定ノードの検索(再帰利用)
//
//nd : 検索開始点のノード (IXMLDOMNode)
//ndName : 検索対象のノード名称
//
//return : 見つけたノードオブジェクト(見つからなかったらnull)
//**********************************************
function TClaimInput.SearchNode(nd: IXMLDOMNode; ndName: string): IXMLDOMNode;
var
    i : integer;
    st : string;
begin

    result := nil;
    for i  :=  0 to  nd.childNodes.Get_length - 1  do
    begin
        st := nd.childNodes.item[i].Get_nodeName();
        if  st = ndName then
         begin
            result := nd.childNodes.item[i];
         end
        else
         begin
            result := SearchNode(nd.childNodes.item[i], ndName);
         end;

        if result <> nil then
        begin
            break;
        end;
    end;
end;

//**********************************************
//指定ノードの検索(再帰利用)(Overload)
//
//nd : 検索開始点のノード (IXMLDOMNode)
//ndName : 検索対象のノード名称
//attrName : 検索対象のノード属性名称
//attrVal  : 検索対象のノード属性値
//
//return : 見つけたノードオブジェクト(見つからなかったらnull)
//**********************************************
function TClaimInput.SearchNode(nd: IXMLDOMNode; ndName: string; attrName : string; attrVal : string): IXMLDOMNode;
var
    i : integer;
    j : integer;
    stn : string;
    stv : string;

    fl : boolean;
begin

    result := nil;
    for i  :=  0 to  nd.childNodes.Get_length - 1  do
    begin
        fl := false;

        stn := nd.childNodes.item[i].Get_nodeName();
        if  stn = ndName then
         begin
            for j := 0 to nd.childNodes.item[i].attributes.Get_length - 1 do
            begin
                stn := nd.childNodes.item[i].attributes.item[j].Get_nodeName();
                stv := nd.childNodes.item[i].attributes.item[j].Get_text();
                if (stn = attrName) and (stv = attrVal) then
                begin
                    fl := true;
                    break;
                end;
            end;
         end;

        if fl = true then
         begin
            result := nd.childNodes.item[i];
         end
        else
         begin
            result := SearchNode(nd.childNodes.item[i], ndName, attrName, attrVal);
         end;

        if result <> nil then
        begin
            break;
        end;
    end;
end;

//**********************************************
//指定ノードの1層上のノードを返す
//
//nd : 検索開始点のノード (IXMLDOMNode)
//
//return : 一個上位のノードオブジェクト
//**********************************************
function TClaimInput.SearchNodeParent(nd: IXMLDOMNode): IXMLDOMNode;
begin
    result := nd.Get_parentNode;
end;

MML CLAIM電文のサンプル

関連記事








どこにもそのものずばりの記載無かったので…(あったら,スマソ)

MML診断履歴情報モジュールとCLAIM予約請求モジュールの電文サンプル(@MML Ver2.3向け)です

CLAIMの取り込みもうまくいってるっぽい?

個人情報やら,ID,GUIDは適当なのに書き換えてありますので
適時,あわせてください

なんか,施設IDは必須のキーっぽいです
これをあわせたら,取り込み,うまくいくようになった感じです

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!-- Copyright(C) 2008 Bmount Products / S.Oyama -->
<Mml version="2.3" createDate="2008-03-03" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mmlCm="http://www.medxml.net/MML/SharedComponent/Common/1.0" xmlns:mmlNm="http://www.medxml.net/MML/SharedComponent/Name/1.0" xmlns:mmlFc="http://www.medxml.net/MML/SharedComponent/Facility/1.0" xmlns:mmlDp="http://www.medxml.net/MML/SharedComponent/Department/1.0" xmlns:mmlAd="http://www.medxml.net/MML/SharedComponent/Address/1.0" xmlns:mmlPh="http://www.medxml.net/MML/SharedComponent/Phone/1.0" xmlns:mmlPsi="http://www.medxml.net/MML/SharedComponent/PersonalizedInfo/1.0" xmlns:mmlCi="http://www.medxml.net/MML/SharedComponent/CreatorInfo/1.0" xmlns:mmlPi="http://www.medxml.net/MML/ContentModule/PatientInfo/1.0" xmlns:mmlBc="http://www.medxml.net/MML/ContentModule/BaseClinic/1.0" xmlns:mmlFcl="http://www.medxml.net/MML/ContentModule/FirstClinic/1.0" xmlns:mmlHi="http://www.medxml.net/MML/ContentModule/HealthInsurance/1.1" xmlns:mmlLs="http://www.medxml.net/MML/ContentModule/Lifestyle/1.0" xmlns:mmlPc="http://www.medxml.net/MML/ContentModule/ProgressCourse/1.0" xmlns:mmlRd="http://www.medxml.net/MML/ContentModule/RegisteredDiagnosis/1.0" xmlns:mmlSg="http://www.medxml.net/MML/ContentModule/Surgery/1.0" xmlns:mmlSm="http://www.medxml.net/MML/ContentModule/Summary/1.0" xmlns:mmlLb="http://www.medxml.net/MML/ContentModule/test/1.0" xmlns:mmlRp="http://www.medxml.net/MML/ContentModule/report/1.0" xmlns:mmlRe="http://www.medxml.net/MML/ContentModule/Referral/1.0" xmlns:mmlSc="http://www.medxml.net/MML/SharedComponent/Security/1.0" xmlns:claim="http://www.medxml.net/claim/claimModule/2.1" xmlns:claimA="http://www.medxml.net/claim/claimAmountModule/2.1">
	<MmlHeader>
		<mmlCi:CreatorInfo>
			<mmlPsi:PersonalizedInfo>
				<mmlCm:Id mmlCm:type="local" mmlCm:tableId="MML0024">0001</mmlCm:Id>
				<mmlPsi:personName>
					<mmlNm:Name mmlNm:repCode="I" mmlNm:tableId="MML0025">
						<mmlNm:fullname>宮崎太郎</mmlNm:fullname>
					</mmlNm:Name>
				</mmlPsi:personName>
				<mmlFc:Facility>
					<mmlFc:name mmlFc:repCode="I" mmlFc:tableId="MML0025">HOGEHOGEテスト病院</mmlFc:name>
					<mmlCm:Id mmlCm:type="JMARI" mmlCm:tableId="MML0027">999</mmlCm:Id>
				</mmlFc:Facility>
				<mmlDp:Department>
					<mmlDp:name mmlDp:repCode="I" mmlDp:tableId="MML0025">内科</mmlDp:name>
					<mmlCm:Id mmlCm:type="medical" mmlCm:tableId="MML0028">03</mmlCm:Id>
				</mmlDp:Department>
				<mmlPsi:addresses>
					<mmlAd:Address mmlAd:repCode="I" mmlAd:tableId="MML0025">
						<mmlAd:full>宮崎県~~</mmlAd:full>
						<mmlAd:zip>800-0000</mmlAd:zip>
					</mmlAd:Address>
				</mmlPsi:addresses>
			</mmlPsi:PersonalizedInfo>
			<mmlCi:creatorLicense mmlCi:tableId="MML0026">doctor</mmlCi:creatorLicense>
		</mmlCi:CreatorInfo>
		<masterId>
			<mmlCm:Id mmlCm:type="facility" mmlCm:tableId="MML0024">2147483647</mmlCm:Id>
		</masterId>
		<toc>
			<tocItem>http://www.medxml.net/MML/SharedComponent/Common/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/SharedComponent/Name/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/SharedComponent/Facility/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/SharedComponent/Department/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/SharedComponent/Address/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/SharedComponent/Phone/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/SharedComponent/PersonalizedInfo/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/SharedComponent/CreatorInfo/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/ContentModule/PatientInfo/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/ContentModule/BaseClinic/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/ContentModule/FirstClinic/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/ContentModule/HealthInsurance/1.1</tocItem>
			<tocItem>http://www.medxml.net/MML/ContentModule/Lifestyle/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/ContentModule/ProgressCourse/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/ContentModule/RegisteredDiagnosis/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/ContentModule/Surgery/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/ContentModule/Summary/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/ContentModule/test/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/ContentModule/report/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/ContentModule/Referral/1.0</tocItem>
			<tocItem>http://www.medxml.net/MML/SharedComponent/Security/1.0</tocItem>
			<tocItem>http://www.medxml.net/claim/claimModule/2.1</tocItem>
			<tocItem>http://www.medxml.net/claim/claimAmountModule/2.1</tocItem>
		</toc>
	</MmlHeader>
	<MmlBody>
		<MmlModuleItem>
			<docInfo contentModuleType="registeredDiagnosis">
				<securityLevel>
					<accessRight permit="all"/>
				</securityLevel>
				<title generationPurpose="record">病名登録</title>
				<docId>
					<uid>00000000-0000-0000-0000-000000000000</uid>
				</docId>
				<confirmDate>2008-03-03</confirmDate>
				<mmlCi:CreatorInfo>
					<mmlPsi:PersonalizedInfo>
						<mmlCm:Id mmlCm:type="local" mmlCm:tableId="MML0024">0001</mmlCm:Id>
						<mmlPsi:personName>
							<mmlNm:Name mmlNm:repCode="I" mmlNm:tableId="MML0025">
								<mmlNm:fullname>宮崎太郎</mmlNm:fullname>
							</mmlNm:Name>
						</mmlPsi:personName>
						<mmlFc:Facility>
							<mmlFc:name mmlFc:repCode="I" mmlNm:tableId="MML0025">HOGEHOGEテスト病院</mmlFc:name>
							<mmlCm:Id mmlCm:type="JMARI" mmlCm:tableId="MML0027">999</mmlCm:Id>
						</mmlFc:Facility>
						<mmlDp:Department>
							<mmlDp:name mmlDp:repCode="I" mmlNm:tableId="MML0025">内科</mmlDp:name>
							<mmlCm:Id mmlCm:type="medical" mmlCm:tableId="MML0028">03</mmlCm:Id>
						</mmlDp:Department>
						<mmlPsi:addresses>
							<mmlAd:Address mmlAd:repCode="I" mmlAd:tableId="MML0025">
								<mmlAd:full>宮崎県~~</mmlAd:full>
								<mmlAd:zip>800-0000</mmlAd:zip>
							</mmlAd:Address>
						</mmlPsi:addresses>
					</mmlPsi:PersonalizedInfo>
					<mmlCi:creatorLicense mmlCi:tableId="MML0026">doctor</mmlCi:creatorLicense>
				</mmlCi:CreatorInfo>
				<extRefs/>
			</docInfo>
			<content>
				<mmlRd:RegisteredDiagnosisModule>
					<mmlRd:diagnosisContents>
						<mmlRd:dxItem>
							<mmlRd:name mmlRd:code="ZZZ4042" mmlRd:system="Diagnosis">病原性</mmlRd:name>
						</mmlRd:dxItem>
						<mmlRd:dxItem>
							<mmlRd:name mmlRd:code="4273006" mmlRd:system="Diagnosis">コレラ</mmlRd:name>
						</mmlRd:dxItem>
					</mmlRd:diagnosisContents>
					<mmlRd:startDate>1968-05-05</mmlRd:startDate>
					<mmlRd:endDate>2001-01-01</mmlRd:endDate>
					<mmlRd:categories>
						<mmlRd:category mmlRd:tableId="MML0012">mainDiagnosis</mmlRd:category>
					</mmlRd:categories>
				</mmlRd:RegisteredDiagnosisModule>
			</content>
		</MmlModuleItem>
		<MmlModuleItem>
			<docInfo contentModuleType="registeredDiagnosis">
				<securityLevel>
					<accessRight permit="all"/>
				</securityLevel>
				<title generationPurpose="record">病名登録</title>
				<docId>
					<uid>00000000-0000-0000-0000-000000000000</uid>
				</docId>
				<confirmDate>2008-03-03</confirmDate>
				<mmlCi:CreatorInfo>
					<mmlPsi:PersonalizedInfo>
						<mmlCm:Id mmlCm:type="local" mmlCm:tableId="MML0024">0001</mmlCm:Id>
						<mmlPsi:personName>
							<mmlNm:Name mmlNm:repCode="I" mmlNm:tableId="MML0025">
								<mmlNm:fullname>宮崎太郎</mmlNm:fullname>
							</mmlNm:Name>
						</mmlPsi:personName>
						<mmlFc:Facility>
							<mmlFc:name mmlFc:repCode="I" mmlNm:tableId="MML0025">HOGEHOGEテスト病院</mmlFc:name>
							<mmlCm:Id mmlCm:type="JMARI" mmlCm:tableId="MML0027">999</mmlCm:Id>
						</mmlFc:Facility>
						<mmlDp:Department>
							<mmlDp:name mmlDp:repCode="I" mmlNm:tableId="MML0025">内科</mmlDp:name>
							<mmlCm:Id mmlCm:type="medical" mmlCm:tableId="MML0028">03</mmlCm:Id>
						</mmlDp:Department>
						<mmlPsi:addresses>
							<mmlAd:Address mmlAd:repCode="I" mmlAd:tableId="MML0025">
								<mmlAd:full>宮崎県~~</mmlAd:full>
								<mmlAd:zip>800-0000</mmlAd:zip>
							</mmlAd:Address>
						</mmlPsi:addresses>
					</mmlPsi:PersonalizedInfo>
					<mmlCi:creatorLicense mmlCi:tableId="MML0026">doctor</mmlCi:creatorLicense>
				</mmlCi:CreatorInfo>
				<extRefs/>
			</docInfo>
			<content>
				<mmlRd:RegisteredDiagnosisModule>
					<mmlRd:diagnosisContents>
						<mmlRd:dxItem>
							<mmlRd:name mmlRd:code="ZZZ0000" mmlRd:system="Diagnosis">鳥</mmlRd:name>
						</mmlRd:dxItem>
						<mmlRd:dxItem>
							<mmlRd:name mmlRd:code="1234567" mmlRd:system="Diagnosis">インフルエンザ</mmlRd:name>
						</mmlRd:dxItem>
					</mmlRd:diagnosisContents>
					<mmlRd:startDate>1968-10-10</mmlRd:startDate>
					<mmlRd:endDate>2001-11-03</mmlRd:endDate>
					<mmlRd:categories>
						<mmlRd:category mmlRd:tableId="MML0012">subDiagnosis</mmlRd:category>
					</mmlRd:categories>
				</mmlRd:RegisteredDiagnosisModule>
			</content>
		</MmlModuleItem>
		<MmlModuleItem>
			<docInfo contentModuleType="claim">
				<title generationPurpose="claim">予約請求登録</title>
				<docId>
					<uid>00000000-0000-0000-0000-000000000000</uid>
				</docId>
				<confirmDate>2008-03-03</confirmDate>
				<mmlCi:CreatorInfo>
					<mmlPsi:PersonalizedInfo>
						<mmlCm:Id mmlCm:type="local" mmlCm:tableId="MML0024">0001</mmlCm:Id>
						<mmlPsi:personName>
							<mmlNm:Name mmlNm:repCode="I" mmlNm:tableId="MML0025">
								<mmlNm:fullname>宮崎太郎</mmlNm:fullname>
							</mmlNm:Name>
						</mmlPsi:personName>
						<mmlFc:Facility>
							<mmlFc:name mmlFc:repCode="I" mmlNm:tableId="MML0025">HOGEHOGEテスト病院</mmlFc:name>
							<mmlCm:Id mmlCm:type="JMARI" mmlCm:tableId="MML0027">999</mmlCm:Id>
						</mmlFc:Facility>
						<mmlDp:Department>
							<mmlDp:name mmlDp:repCode="I" mmlNm:tableId="MML0025">内科</mmlDp:name>
							<mmlCm:Id mmlCm:type="medical" mmlCm:tableId="MML0028">03</mmlCm:Id>
						</mmlDp:Department>
						<mmlPsi:addresses>
							<mmlAd:Address mmlAd:repCode="I" mmlAd:tableId="MML0025">
								<mmlAd:full>宮崎県~~</mmlAd:full>
								<mmlAd:zip>800-0000</mmlAd:zip>
							</mmlAd:Address>
						</mmlPsi:addresses>
					</mmlPsi:PersonalizedInfo>
					<mmlCi:creatorLicense mmlCi:tableId="MML0026">doctor</mmlCi:creatorLicense>
				</mmlCi:CreatorInfo>
				<extRefs/>
			</docInfo>
			<content>
				<claim:ClaimModule>
					<claim:information claim:status="perform" claim:performTime="2008-03-03T12:20:09" claim:admitFlag="false"/>
					<claim:bundle claim:classCode="120" claim:classCodeId="Claim007">
						<claim:className>再診(再診)</claim:className>
						<claim:bundleNumber>1</claim:bundleNumber>
						<claim:item claim:code="112009210" claim:subclassCode="0" claim:subclassCodeId="Claim003" claim:tableID="dolphinClaim_2001-10-03">
							<claim:name>再診(診療所)(1回目)</claim:name>
						</claim:item>
					</claim:bundle>
					<claim:bundle claim:classCode="800" claim:classCodeId="Claim007">
						<claim:className>その他</claim:className>
						<claim:bundleNumber>1</claim:bundleNumber>
						<claim:item claim:code="113001810" claim:subclassCode="0" claim:subclassCodeId="Claim003" claim:tableID="dolphinClaim_2001-10-03">
							<claim:name>特定疾患療養指導料(診療所)</claim:name>
						</claim:item>
						<claim:item claim:code="120002570" claim:subclassCode="0" claim:subclassCodeId="Claim003" claim:tableID="dolphinClaim_2001-10-03">
							<claim:name>特定疾患処方管理加算(処方せん料)</claim:name>
						</claim:item>
					</claim:bundle>
					<claim:bundle claim:classCode="210" claim:classCodeId="Claim007">
						<claim:className>投薬(内服・頓服・調剤)(入院外)</claim:className>
						<claim:administration claim:adminCode="1000107" claim:adminCodeId="dolphinAdmin_2001-10-03">内服 1回 朝食前</claim:administration>
						<claim:bundleNumber>14</claim:bundleNumber>
						<claim:item claim:code="612220335" claim:subclassCode="2" claim:subclassCodeId="Claim003" claim:tableID="dolphinDrug_2001-10-03">
							<claim:name>メプチン錠 0.05mg</claim:name>
							<claim:number>1</claim:number>
						</claim:item>
						<claim:memo>院外処方</claim:memo>
					</claim:bundle>
					<claim:bundle claim:classCode="000" claim:classCodeId="Claim007">
						<claim:className>レントゲン</claim:className>
						<claim:bundleNumber>1</claim:bundleNumber>
						<claim:item claim:code="00000000" claim:subclassCode="0" claim:subclassCodeId="Claim003" claim:tableID="dolphinFilm_2001-10-03">
							<claim:name>レントゲンテスト</claim:name>
							<claim:film>
								<claim:filmSize claim:sizeCode="07" claim:sizeCodeId="Claim005" claim:filmDivision="分割">半切コンピュータ断層撮影用3枚</claim:filmSize>
								<claim:filmSize>3</claim:filmSize>
							</claim:film>
						</claim:item>
					</claim:bundle>
				</claim:ClaimModule>
			</content>
		</MmlModuleItem>
	</MmlBody>
</Mml>

Claimサービスのポート番号

関連記事




いやぁ~,探すの大変だった(笑

通信プログラム,ポート番号,わかんなくて,ソケット通信,繋がらないし

お客さんとこ,連絡しても,状態


探しまくったら,ありました...

ここに参考情報が


まず,Claimサービスを立ち上げないと駄目らしい

シェルで以下のコマンド叩いて起動設定を行ってください(スーパーユーザにて)

    sudo dpkg-reconfigure jma-receipt-hosp

    あるいは

    sudo dpkg-reconfigure jma-receipt

デーモンをスタートしますか?で,はいはお忘れなく!

んで,Claimのポート番号ですが
デフォルトは,8210です

これで,ソケットの通信はうまくいくようになった感じ

ただし,ORCAへの電文取り込みがまだ,うまくいってないですわぁ~
これは,明日以降,テストするということで…

【Delphi】インデント付きでXMLの保存

関連記事








ここのページにサンプルがありまして

コードを抜粋しておきます

procedure SaveXMLToFile(FileName: TFileName);
var
    lStringList: TStringList;
    Writer: IMXWriter;
    Reader: IVBSAXXMLReader;
begin
    Writer := CoMXXMLWriter.Create;
    Reader := CoSAXXMLReader.Create;

    Writer.byteOrderMark := True;
    Writer.omitXMLDeclaration := False;
    Writer.indent := True;

    Reader.contentHandler := Writer as IVBSAXContentHandler;
    Reader.dtdHandler := Writer as IVBSAXDTDHandler;
    Reader.errorHandler := Writer as IVBSAXErrorHandler;
    Reader.putProperty('http://xml.org/sax/properties/lexical-handler',    Writer);
    Reader.putProperty('http://xml.org/sax/properties/declaration-handler',    Writer);

    Reader.parse(FDoc);

    lStringList := TStringlist.Create;
    lStringList.Text := Writer.output;
    lStringList.SaveToFile(FileName);
end;

んで,お手軽にインデント付きでXMLが出力できるんですが…

XMLファイルの先頭が必ず

<?xml version="1.0" encoding="UTF-16" standalone="no"?>



エンコード,UTF-8で出したいのに,UTF-16でしか,出力できない感じ orz

んで,まえ,学校プロジェクトで吐き出していたXML@VC++版は,エンコードが,綺麗にS-JISと出てたよなぁ~
と思い出し…

んで,つらつら調べたら
エンコードを変えるには,IStreamを使うしか,手がなさそうな感じ…

VC++版を気合入れて,Delphi版へ書き換えてみましたわぁ~

あ,外部のpasファイルがいりますんで,注意!

//uses ShLwApi;

//**********************************************
//インデントつきでXMLの保存
//
//**********************************************
procedure TClaimOutput.SaveIndentXML(fname: string; pDoc: IXMLDOMDocument);
var
    stmFile : IStream;
    wrt : IMXWriter;
    rdr : IVBSAXXMLReader;
begin

    SHCreateStreamOnFile(
            PChar(fname),
            STGM_READWRITE or STGM_SHARE_DENY_WRITE or STGM_CREATE,
            stmFile
        );

    wrt := CoMXXMLWriter.Create;
    wrt.indent := True;
    wrt.encoding := 'utf-8';
    wrt.version := '1.0';
    wrt.output := stmFile;

    rdr :=  CoSAXXMLReader.Create;
    rdr.contentHandler := wrt as IVBSAXContentHandler;

    rdr.parse(pDoc);
end;

SHCreateStreamOnFile()を利用するため,ShLwApi.pasがいります
Delphi5じゃ,なかったです
んで,ここから,ダウンロードしてきました


とりあえず,インデント付きでXMLは出力されていますわぁ~~♪

1 2