У меня есть следующий источник XML документ:XSLT заменить элемент спички на основе значения дочернего узла
<UserDefinedFields>
<UserDefinedField>
<Name>ABC</Name>
<Value>123</Value>
</UserDefinedField>
<UserDefinedField>
<Name>XYZ</Name>
<Value>645q3245</Value>
</UserDefinedField>
</UserDefinedFields>
Я хочу, чтобы перезаписать соответствующие узлы из входного XML, если есть соответствие <Name>
значения .. Так что в других слова, конечный результат слияния это:
<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 ответы в порядке ... 2.0 предпочтительнее.
Dr. Kay: Я понимаю, что в предлагаемом решении будут выводиться даже такие элементы '$ doc2 // UserDefinedField', которые не соответствуют элементу' $ doc1 // UserDefinedField'? Если это так, это не то, что хочет OP - он хочет вывести только такие элементы '$ doc2 // UserDefinedField', которые соответствуют (« переопределяют ») элементы в' $ doc1' –
. Я не уверен, где ваше чтение требования OP берутся, но да, мое решение предполагает, что если есть запись в doc2, которая не соответствует записи в doc1, запись в doc2 будет добавлена к выходу. Если это не так, вы можете настроить решение с помощью чего-то вроде if (current-group() [1]/(/) - $ doc1), затем ... ' –
Dr. Kay, Re:" flag Я не уверен, где ваше чтение требований OP происходит от ".Это не просто мое чтение - это точно так же, как указано в вопросе: «Я хочу переписать соответствующие узлы из входного XML, если есть соответствующее значение ..» Обратите внимание на * if * ... –