2009-04-06 14 views
1

XMLSerializerを使用してシリアライズした後、XSLTを使用してさまざまな形式の電子メールまたはWebサービス呼び出しに変換するクラスがありました。すべてが順調でした。XSLスタイルシートは、DataContractSerializerで生成されたXMLを解析しません。

私たちはデータレイヤーのいくつかの部分でLinqを使用し始めました.XSLスタイルシートで消費されるLinqオブジェクトの一部をシリアル化する必要がありました。おそらく、XMLSerializerではなくDataContractSerializerを使用する方がよいと判断しました。

私はDataContractsを取得し、すべての設定を行い、物事はエンティティ名のいくつかのわずかな変更でうまくいきます...しかし、スタイルシートはXMLを一切処理しません。なぜ私が何かを得ていないのは本当に分かりません。基本的には、xslタグを取り除いたデータだけです。

何が原因でしょうか?

編集:私はのDataContract宣言を変更する前にここで

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="CallTicket"> 

はDataContractSerializerから生成されたXMLは次のとおりです。

<CallTicket xmlns="http://schemas.datacontract.org/2004/07/CRMInterface.CRMData" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 

答えて

2

それはあなたのXSLTことを、あなたの新しいXMLはそれでXML名前空間を持っていることだろう適切に対処しないでください?

XMLファイルとXSLTファイルの関連部分を表示できますか?

私はそれを考え出したと思うマルク・

+0

はい、。 _私はどのようにして正しく名前空間を扱うのですか? xsl宣言で編集します... – CodeRedick

+0

XMLにXML名前空間がある場合は、XSLTに同じ宣言が必要です。xmlns:xy接頭辞で要素を修飾する必要があります。 –

+0

LINQエンティティが使用するネームスペースを制御できるとは思いませんか? .designer.csファイルにハードコードされているように見えますが、デザイナーからアクセスする方法はありません... – CodeRedick

0

、名前空間は、私が実現よりも重要です。シリアル化される各クラスに対してDataContractAttribute(Namespace = "")を設定すると動作します。私はlinqのエンティティとやりたいことがいくつかありますが...正しい軌道にあります。

私を取得する唯一のものは、XSLTファイル内の名前空間への参照がなかったということです...

+0

参照がない場合はそれをxsl:stylesheet要素の属性として追加する必要があります。私が提出した答えの私の例を参照してください –

+0

代わりに名前空間をクリアしないで、実際に何かに設定し、XSLでその名前空間を使用してください。 XML要素は、ローカル名+名前空間の組み合わせによって識別されます。ネームスペースを消去することで、名前の衝突が起こりやすくなります。 –

+0

これを何かに設定することで、数多くの既存のスタイルシートを更新する必要があります。 :Pこれは、いずれにしても自分のコードの外で消費されることになるとは思わない... – CodeRedick

3

あなたが最も可能性の高い名前空間の問題を持っています。例:XMLはこの

<Root xmls="http://www.example.org/1" ....

<test>one</test>

のように見える場合

はその後、あなたは具体的に名前空間を参照XSLT

に2つのいずれかを行う必要があるでしょうし、それに応じて接頭辞を使用する

<xsl:stylesheet xmlns:ex="http://www.example.org/1" ....>` 
    ... 

    <myTag><xsl:select value-of="//ex:test"/></myTag>` 

または

1つしかない場合、名前空間はそれXSLTファイルのデフォルトの名前空間を作る:おそらく

<xsl:stylesheet xmlns="http://www.example.com/1" ...` 

... 
    <myTag><xsl:select value-of="//test"/></myTag>` 
関連する問題