1

私は xml を持っています。いくつかの値を動的に更新する必要があります。

例:

 <School>
  <class name=1>
   <students>10</students>
   <teacher>3</teacher>
  </class>
  <class name=2>
   <students>102</students>
   <teacher>13</teacher>
  </class>
</School>

他のxmlの場所:

私はxpathとそれに対応する値を持っています例えば:

 <data>
  <path>/school/class['name' = 1]/students</path><value>20</value>
 </data>

したがって、xsltを介してクエリを実行すると

デフォルトの xml が取得され、データ関連の xml も取得され、対応する値を置き換える必要があります。

xslt ..を介して行うことは可能ですか?

4

2 に答える 2

0

XSLT は、XML ドキュメントを別の形式 (別の XML ドキュメントを含む) に変換します。これは通常、何らかの変換が行われる新しい出力ファイルを作成することによって、これを行う方法です。その後、古いファイルを削除して、新しいファイルに置き換えることができます。

編集: あなたの投稿を読み直すと、XSLT への入力として 2 つの XML ドキュメントを処理できるかどうかも尋ねていると思いますが、答えはイエスです。「document()」関数を見てください。

于 2012-06-08T15:16:54.540 に答える
0

始めに、いくつかのコメント:

  1. XML の形式が正しくありません (属性値は引用符で囲む必要があります)
  2. XPath 式/school/class['name' = 1]/studentsはおそらく期待どおりに動作しません;) ... 述語は文字列を整数と'name' = 1比較し、false を返します。これは、式が常に空のノード セットを返すことを意味します。name 属性が 1 のクラスを選択するには、次のように記述します。'name'1/school/class[@name = 1]/students

あなたの質問に戻りましょう!

標準 XSLT 1 または 2 では、動的 XPath 式を実行できません。これは XSLT 3.0 で可能になるはずであり、独自の拡張機能を使用すると可能になる場合があります (プロセッサによって異なります)。

XQuery などの言語 (更新機能を備えている) の方が適している可能性があります (もちろん、XPath 式を XQuery に準拠するように曲げることができる場合)。

それでも XSLT を使用する必要がある場合、私が通常この種のタスクを実行する方法は、最初のステップとして XSLT 変換を生成し、2 番目のステップとして実行することです。

最初のステップ自体が XSLT 変換である場合があり、生成される XSLT 変換内で XPath 式がコピーされます。2 番目のステップが実行されると、これらの XPath 式は単純な静的 XPath 式になります...

于 2012-06-08T16:13:01.343 に答える