問題タブ [xslcompiledtransform]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
xslt - xsl で名前空間を動的に変更する
私がやろうとしていることを説明するのは少し難しいので、単純化しすぎた例を使用します。
A.xsl、B.xsl、および Common.xsl の 3 つの Xsl テンプレートがあります。
A.xsl と B.xsl はどちらも「xsl:include」を使用して Common.xsl をインクルードします。A.xsl は次のようになります。
B.xls は次のようになります。
最後に、Common.xls は次のようになります。
したがって、A と B は異なって見え、同じ名前空間プレフィックス (tns) を使用しますが、名前空間の値は異なります。A と B には、tns 名前空間も使用する Common.xsl が含まれています。
言い換えれば、Common.xsl の tns 名前空間が「呼び出し元」、つまり A または B の xsl ファイルの値を取得するようにします。
ただし、これは XslCompiledTransform を使用している場合は機能しません。Common.xsl では、tns が宣言されていない名前空間であると不平を言っています。Common.xsl で tns 名前空間を宣言する場合は、 または のいずれhttp://MyNamespaceForA
かを使用する必要がありますhttp://MyNamespaceForB
。
http://MyNamespaceForB
Common.xslのように tns を宣言するとします。ここで、A.xsl を使用すると、tns 名前空間の値が競合します。その結果、Common.xsl によって生成された XML 要素には、明示的な名前空間の値http://MyNamespaceForB
. もちろん、それはうまくいきません。
私が何をしようとしているのか、ある程度明確になることを願っています。要するに、「呼び出し元」の xsl ファイルに、含まれている xsl ファイル内の名前空間の値を指定させたいと考えています。
何か案は?/フレドリック
.net - NANT を介した Xsl 変換プロセスが、要求されたすべての xpath を更新しない
これを説明するのは難しいでしょうが、最善を尽くします。不明な点がある場合は、説明/追加のためにコメントを追加してください。
背景情報:
- msbuild を実行する NANT (ビルド プロセス) バージョン 0.85.2478.0
- CruiseControl.NET
- Windows Server 2008 R2 64 ビット
- .NET フレームワーク 3.5
Web アプリケーションの web.config でいくつかの設定を更新/変更しようとしています。NANT コードを使用して、CruiseControl.NET 経由で実行されるビルド プロセスを実行します。XslCompiledTransform を介して構成ファイルを更新し、スタイルシートと設定ファイルを使用しています。
「UpdateConfig.xslt」ファイルは次のようになります。
以下は、機能する値と機能しない値を含む設定ファイルの一部です。
問題: Web アプリケーションのビルドを開始すると、必要な / 指定したすべての構成セクションが更新されません。
XmlSpy、Notepad++、および XmlQuire を使用してすべての xpath 式を検証したので、それらが正しいことは 100% わかっています。
何が間違っているかについての私の唯一の考えは、それがスタイルシート (UpdateConfig.xslt) にあるということですが、このビルド プロセスは私が書いたものではなく、読むのに苦労しています。
何が問題なのか、またはプロセスをより適切にデバッグする方法について誰かが考えている場合は、ぜひ聞いてください。
ああ、更新されないセクションは次の xpath です。
c# - AltovaMapForceで生成されたXSLTファイルを使用する場合のXslCompiledTransform例外
.NETのXslCompiledTransformを使用してXSLT変換を実行しています。AltovaのMapForceツールを使用して自動的に生成したXSLTファイルを使用しようとすると、例外が発生します。
XSLスタイルシート定義から:
... AltovaはXSLTに対して独自の拡張関数を定義しているようで、XslCompiledTransformはそれらを見つける方法を知りません。XslCompiledTransformにこれらの外部関数を認識させるにはどうすればよいですか?
xml - vb 2010 XslCompiledTransform は、URI ディスク ファイルではなく文字列から変換する必要があります
次のコードは動作し、ローカル ディスクから XSL と XML を取得し、変換された XML を変数 Xtransoutput に返します。
私の問題は、XML と XSL の両方が既に別の文字列になっていることです。それらはディスク上になく、セキュリティ上の理由からディスクに書き込むことができません。これらをディスクファイルからではなく文字列から動作させる方法について何か提案はありますか?
ティア!
c# - HTML コントロールに表示する XML 要素のスペース
C# 3.5 を使用しています。XslCompiledTransform オブジェクトに渡す XML 文字列があります。次に、出力を WebBrowser に表示します。XML 要素に、WinForms HTML ブラウザーに表示する必要がある余分なスペースが含まれていることを除いて、すべてがうまく機能しています。HTMLでJavaScriptを使用できません。サンプルの XML 要素を次に示します。
文字列 " " を置き換えてみました" "
が、XslCompiledTransform オブジェクトが変換に使用した xml が無効になりました (XML が無効です)。次に、「」を置き換えてみまし"&nbsp"
たが、テキスト 
がスペースではなくhtmlに表示されました。余分なスペースを表示するにはどうすればよいですか?
xml - 子ノードから親ノード xslt への要素値をフィルタリングして削除する
すべての子要素を削除して親ノードのカンマ区切りの行に配置する方法を教えてください。画像の要素も完全に削除thumbURl
します。title
すでにこのファイルの変換を行う必要があり、これは xs です。
これは、私が変更する必要があるデータがどのように見えるかです
これは私がデータで行う必要があることです:
c# - XslCompiledTransformおよびカスタムXmlUrlResolver:「同じキーを持つエントリがすでに存在します」
カスタムXmlUrlResolverによってデータベースからロードされたXSLTドキュメントをデバッグする方法はありますか、または誰かが知っていますか、以下のエラーメッセージは何についてですか?
一般的なxsltドキュメントをインポートするXSLTスタイルシートがあります。
スキームはXmlResolver
、DBからXSLTドキュメントをロードするカスタムによって処理されますが、エラーが発生します。
同じキーのエントリがすでに存在します。
によって参照される一般的なXSLTドキュメントにxsl:import
は、それぞれが一意の名前を持ついくつかの一般的なXSLTテンプレートが含まれています。
このエラーは、XSLTドキュメントをローカルファイルシステムからデータベースに移動した後に発生し始めました。ローカルファイルを指すデフォルトのインポートスキームを使用している場合、およびローカルファイルシステムからXSLTドキュメントをロードする場合、エラーは発生しません。
また、のインスタンスを作成するときにデバッグをオンにしようとしましたXslCompiledTransform
が、どういうわけか、データベースベースのXSLTに「ステップイン」することはできません。
更新:以下は基本的に要求されたリゾルバーコードですが、私のコード内で例外は発生していません。したがって、以下のこのコードには明らかな理由はないと思います。(これと同じコードは、インポートを含むXSLTスタイルシートをロードするために実際に使用され、インポートをコメントアウトすると、すべてが期待どおりに機能します。)
完全を期すために、IDatabaseServiceインターフェース(関連部分):
更新:代わりにWebサーバーからスタイルシートを一時的にロードすることで問題を特定しようとしましたが、これは機能します。Webサーバーに保存されているスタイルシートとは対照的に、SQLServerはXML宣言なしでXMLフラグメントのみを保存しているように見えることを学びました。
更新:例外のスタックトレース:
System.Xml.Xsl.XslLoadException:XSLT-Kompilierungsfehler。フェラーベイ(9,1616)。---> System.ArgumentException:同じキーのエントリがすでに存在します。beiSystem.Collections.Specialized.ListDictionary.Add(Object key、Object value)bei System.Collections.Specialized.HybridDictionary.Add(Object key、Object value)bei System.Xml.Xsl.Xslt.XsltLoader.LoadStylesheet(XmlReader reader、Boolean include)bei System.Xml.Xsl.Xslt.XsltLoader.LoadStylesheet(Uri uri、Boolean include)bei System.Xml.Xsl.Xslt.XsltLoader .LoadStylesheet(XmlReader reader、Boolean include)--- Ende der inneren Ablaufverfolgung des Ausnahmestacks --- bei System.Xml.Xsl.Xslt.XsltLoader.LoadStylesheet(XmlReader reader、Boolean include)bei System.Xml.Xsl.Xslt.XsltLoader .Load(XmlReaderリーダー)bei System.Xml.Xsl.Xslt.XsltLoader.Load(コンパイラーコンパイラー、オブジェクトスタイルシート、
.net - XSLT を使用して XML 内の一致するすべてのノードを置き換える
xml ファイル内の一致するすべてのノードを置き換えたかったのです。
元の xml に:
次の xslt を適用しました。
しかし、それは同じxmlを生成します。私は何を間違えましたか?
c# - XslCompiledTransformを使用した空白の除去
XslTransform
大きなアプリをからコンパイル済みのxslファイルに移行しようとしていますXslCompiledTransform
。
アプリはを使用しXsl
てHTMLファイルを作成し、変換データ( )は、データベースから返された、を使用してXml
に渡されました。Xsl
XmlDataDocument
私はそれをすべて変更したので、今は(少なくとも一時的に)変更します:
C#
XSL(単なる例)
問題
それは機能しますが、xslは出力するタグ間の空白を取り除きます:
私はもう試した:
- 使用して
xml:space="preserve"
いますが、動作させることができませんでした - をオーバーライドしました
OutputSettings
が、良い結果が得られませんでした(何かを逃した可能性があります) - を使用する
xsl:output method="xml"
と、それは機能しますが、自己終了タグや他の多くの問題が発生します
だから私は何をすべきかわかりません。たぶん私は何か正しいことをしていません。
ありがとう!
編集
将来の参考のために、すべてのXSLをそのままにしてこの問題に取り組みたい場合は、私が書いた、という名前のこのC#クラスCustomHtmlWriter
を試すことができます。
基本的に私がしたことは、すべてのタグのとXmlTextWriter
を書き込むメソッドから拡張して変更することです。start
end
この特定のケースでは、次のように使用します。
それが誰かを助けることを願っています。
c# - XslCompiledTransformを使用してhtmlを文字列として取得します。結果は空です
xsltを使用してxmlからhtmlリスト()を作成したいと思います。私はxmlファイルとxsltファイルでそうすることができました。ここで、xml文字列またはXmlDocumentとxsltファイルを使用してこれを実行します。
これは私の現在のコードです:
これは、単一のWebアプリケーションアセンブリ上にあります。例外はスローされません。「」を返すだけです。
私のXSLT
MY XML
ありがとう!