1

BizTalk 2010 アプリケーションを書き直し、外部アセンブリを廃止しようとしていますが、xpath の問題が発生しているようです。

ヘルスケア請求 (837P) を xml としてデータベースに保存するプロセスがあり、後で抽出する必要があります。次のような xml メッセージを返すストアド プロシージャを呼び出す WCF ポートがあります。

<ClaimXml_SEL_GetClaimXmlResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo">
   <StoredProcedureResultSet0>
      <StoredProcedureResultSet0 xmlns="http://schemas.microsoft.com/Sql/2008/05/ProceduresResultSets/dbo/ClaimXml_SEL_GetClaimXml">
         <Claim><![CDATA[<ns0:X12_00401_837_P (etc.)

そこで、実際の 837P メッセージ (ns0:X12_00401_837_P で始まる部分) を抽出する必要があります。

ヘルパー クラスは非常に単純で、次のようなメソッドがあります。

public XmlDocument ExtractClaimXml(XmlDocument xDoc)
{
   XmlDocument xReturn = new XmlDocument();

   XmlNode node = xDoc.SelectSingleNode("/*[local-name()='ClaimXml_SEL_GetClaimXmlResponse' and namespace-uri()='http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo']/*[local-name()='StoredProcedureResultSet0' and namespace-uri()='http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo']/*[local-name()='StoredProcedureResultSet0' and namespace-uri()='http://schemas.microsoft.com/Sql/2008/05/ProceduresResultSets/dbo/ClaimXml_SEL_GetClaimXml']/*[local-name()='Claim' and namespace-uri()='http://schemas.microsoft.com/Sql/2008/05/ProceduresResultSets/dbo/ClaimXml_SEL_GetClaimXml']");

   xReturn.LoadXml(node.InnerText);

   return xReturn;
}

メッセージの割り当て図形には次のコードがあります。

rawClaimXml = ClaimXmlResponse;
strippedClaim = XmlHelperClass.ExtractClaimXml(rawClaimXml);
Claim837P = strippedClaim;

...どこでClaimXmlResponse; は上記のメッセージ、Claim837P は 837P メッセージ、rawClaimXml と strippedClaim は xml 変数です。これは問題なく動作しますが、外部アセンブリを呼び出すのは過剰に思えます。

私は割り当て形状でこれを試しました:

rawClaimXml = xpath(ClaimXmlResponse, "same xpath as above");
strippedClaim.LoadXml(rawClaimXml.InnerText);
Claim837P = strippedClaim;

...しかし、「'UnderlyingXmlDocument.InnerText': get アクセサーがないため、.NET プロパティは書き込み専用です」というエラーが表示されます。

それで、xpathクエリから文字列を取得しようとしました:

rawClaimString = xpath(ClaimXmlResponse, "string(same xpath as above)");
rawClaimString = rawClaimString.Replace("<![CDATA[", "");
rawClaimString = rawClaimString.Replace(">]]>",">");
strippedClaim.LoadXml(rawClaimString);
Claim837P = strippedClaim;

……でも、もったいない。バリアントも試しました:

rawClaimXml = xpath(ClaimXmlResponse, "same xpath as above");
rawClaimString = rawClaimXml.InnerXml.ToString();
rawClaimString = rawClaimString.Replace("<![CDATA[", "");
rawClaimString = rawClaimString.Replace(">]]>",">");
strippedClaim.LoadXml(rawClaimString);
Claim837P = strippedClaim;

…が、それでも駄目です。助言がありますか?

ありがとう!

4

2 に答える 2