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;
…が、それでも駄目です。助言がありますか?
ありがとう!