に基づいて一致して要素を置き換える:XSLTは、私は、次のソースXML文書を持っている子ノードの値
<UserDefinedFields>
<UserDefinedField>
<Name>ABC</Name>
<Value>123</Value>
</UserDefinedField>
<UserDefinedField>
<Name>XYZ</Name>
<Value>645q3245</Value>
</UserDefinedField>
</UserDefinedFields>
私は一致<Name>
値がある場合は、入力XMLから一致するノードを上書きしたい...だから、他に言葉、でこれをマージの最終結果:
<UserDefinedField>
<Name>XYZ</Name>
<Value>NEWVALUE!</Value>
</UserDefinedField>
は...次のようになります。
<UserDefinedFields>
<UserDefinedField>
<Name>ABC</Name>
<Value>123</Value>
</UserDefinedField>
<UserDefinedField>
<Name>XYZ</Name>
<Value>NEWVALUE!</Value>
</UserDefinedField>
</UserDefinedFields>
これを達成するための適切なXSLT変換は何ですか?
XSLT 2.0または1.0の回答は問題ありません。あなたがグループ化でこれを行うことができ
Dr. Kay、提案されたソリューションは '$ doc1 // UserDefinedField'要素と一致しない' $ doc2 // UserDefinedField'要素を出力すると私の理解は間違っていますか?もしそうなら、これはOPが望んでいるものではありません - '$ doc1'の要素にマッチ("オーバーライド ")する' $ doc2 // UserDefinedField'要素だけを出力したい –
OPの要件が由来しますが、私の解決策では、doc2のエントリがdoc1のエントリと一致しない場合、doc2のエントリが出力に追加されることを前提としています。それが欲しいものではない場合は、 'if(current-group()[1] /(/)は$ doc1)のようなもので解決策を調整することができます... ' –
Dr. Kay、Re:" フラグ OPの要件の読者がどこから来ているのか分かりません。それはちょうど私の読書ではありません - それは正確に質問で指定されています: "一致する値があれば入力XMLから一致するノードを上書きしたい.." * * *をメモしてください... –