1

XMLSerializer を使用してシリアライズし、XSLT を使用してさまざまな形式の電子メールまたは Web サービス呼び出しに変換するいくつかのクラスがありました。すべてが順調でした。

データ レイヤーの一部で Linq の使用を開始したため、XSL スタイルシートで使用される Linq オブジェクトの一部をシリアル化する必要がありました。XMLSerializer の代わりに DataContractSerializer を使用する方がおそらく最善であると判断しました。

DataContracts とすべてをセットアップし、エンティティ名にいくつかの小さな変更を加えてうまくシリアル化します... しかし、スタイルシートは XML をまったく処理しません。少なくとも何かが得られない理由が本当にわかりません...基本的には、xslタグが取り除かれたデータだけが得られます。

何が原因でしょうか?

編集:

<?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">

以下は、DataContract 宣言を変更する前に DataContractSerializer から生成された XML です。

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

3 に答える 3

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>`
于 2009-04-06T19:08:15.143 に答える
2

新しい XML に XML 名前空間が含まれていて、XSLT が適切に処理していない可能性はありますか?

XML および XSLT ファイルの関連部分を教えていただけますか?

マルク

于 2009-04-06T18:50:55.683 に答える
0

私はそれを理解したと思います.名前空間は私が思っていたよりも重要です. シリアル化されるクラスごとに DataContractAttribute(Namespace="") を設定すると機能します。linq エンティティを処理する作業がもう少しありますが、正しい軌道に乗っています。

私が得た唯一のことは、xslt ファイルに名前空間への参照がなかったことです...

于 2009-04-06T18:58:35.710 に答える