2017-06-30 13 views
0

次のコードを使用して、BizTalkパイプラインコンポーネントの既存のXMLメッセージの名前空間を変更しています。これは動作しますが、どのようにしてドキュメントに名前空間エイリアスを追加するのでしょうか。既存のxmlに名前空間とエイリアスを追加します

XNamespace toNs = "http://hl7.org/fhir/Encounters"; 

XElement doc = XElement.Parse(xmlIn); 

doc.DescendantsAndSelf().Attributes().Where(a => a.IsNamespaceDeclaration).Remove(); 

var ele = doc.DescendantsAndSelf(); 

foreach (var el in ele) 
    el.Name = toNs + el.Name.LocalName; 

return new XDocument(doc); 
+0

あなたは[XmlSerializerNamespaces]がその仕事をすることができるかもしれないことを[回答](https://stackoverflow.com/questions/2339782/xml-serialization-and-namespace-prefixes)で確認しましたか? – andiblas

+0

ESBの名前空間パイプラインコンポーネントの追加と削除については、https://msdn.microsoft.com/en-us/library/ee250047(v=bts.10).aspx – Dijkgraaf

+0

**をお持ちください! –

答えて

1

ルートに宣言属性を追加するだけです。この例を見てみましょう:

<Root> 
    <Child>Value</Child> 
</Root> 

をこのコードを実行する場合:

var root = XElement.Parse(xml); 

XNamespace ns = "http://www.example.com/"; 

foreach (var element in root.DescendantsAndSelf()) 
{ 
    element.Name = ns + element.Name.LocalName; 
} 

root.Add(new XAttribute(XNamespace.Xmlns + "ex", ns)); 

あなたはこの結果を得るでしょう:

<ex:Root xmlns:ex="http://www.example.com/"> 
    <ex:Child>Value</ex:Child> 
</ex:Root> 

はデモ用のthis fiddleを参照してください。

+0

これを今すぐ試してみます – David

+0

将来の読者のために*これはBizTalkアプリケーション*なので**この回答は正しくありません**。 1)メッセージタイプの衝突はXmlDisassemblerの設定で処理する必要があります。2)XmlDocument/XDocumentの使用は、パイプラインコンポーネントで使用されているレビューに失敗します。 Charles MagerはBizTalk開発者ではないので、私はDownvoteしません。 @David –

+0

@ Johns-305それはあなたがそれをどのように見るかによって異なります。質問された特定の質問に対する答えを与えるという点で正しいです。全体的なアプローチが正しいかどうかについて私はコメントできません。 –

4

この(重複するメッセージタイプ)の理由がわかったので、これを処理する正しいBizTalkの方法は、構成済みのXmlDisassemblerコンポーネントでカスタムパイプラインを展開することです。とにかく誰もがこれをやっているはずです。

この正確なシナリオを記述し、それを解決する方法を、このTechNetのWikiの記事を参照してください:あなたは絶対に内容を変更する必要がある場合BizTalk: Improve Deployment and Tracking by Always Creating Custom Pipelines

は、パイプラインコンポーネントでの正しい方法はXmlTranslatorStreamを使用することです。これは、XmlDocumentまたはXDocumentの代わりです。

BizTalkの観点からは、マークされた回答は正しくありません。ごめんなさい。 :(

+0

これは素晴らしいことですが、私はより良い方法がなければならないことを知っていました。私はこの問題を解決する方法についてかなりの調査をしましたが、これらのリンクを思い付くことはありませんでした。ありがとう! – David

関連する問題