Я надеюсь, что кто-то может указать мне в правильном направлении. Я попытался изолировать свой вопрос в простой форме, как я могу себе представить. В разборе файла:Как лучше объединить данные с xslt
<?xml version="1.0" encoding="UTF-8"?>
<Master>
<Info>
<Info1></Info1>
<Info2></Info2>
<Info3></Info3>
<Offer>
<Id>1a</Id>
<Field1></Field1>
<Field2></Field2>
<Field3></Field3>
</Offer>
<Offer>
<Id>3a</Id>
<Field1></Field1>
<Field2></Field2>
<Field3></Field3>
</Offer>
</Info>
</Master>
Мне нужно сравнить его с подобным файлом:
<?xml version="1.0" encoding="UTF-8"?>
<Old>
<Info>
<Info1></Info1>
<Info2></Info2>
<Info3></Info3>
<Offer>
<Id>1a</Id>
<Field1></Field1>
<Field2></Field2>
<Field3></Field3>
</Offer>
<Offer>
<Id>2a</Id>
<Field1></Field1>
<Field2></Field2>
<Field3></Field3>
</Offer>
</Info>
</Old>
Использование поля в качестве ключа, я хотел бы, чтобы произвести следующее с:
<?xml version="1.0" encoding="UTF-8"?>
<Merged>
<Info> ##from Master
<Info1></Info1>
<Info2></Info2>
<Info3></Info3>
<Offer> ##from Master
<Id>1a</Id>
<Field1></Field1>
<Field2></Field2>
<Field3></Field3>
<Action>Update</Action>
</Offer>
<Offer> ##from Old
<Id>2a</Id>
<Field1></Field1>
<Field2></Field2>
<Field3></Field3>
<Action>Delete</Action>
</Offer>
<Offer> ##from Master
<Id>3a</Id>
<Field1></Field1>
<Field2></Field2>
<Field3></Field3>
<Action>Add</Action>
</Offer>
</Info>
</Merged>
1a соответствует как Мастеру, так и Старому, поэтому он становится операцией обновления, 2а существует в Старом, но не Мастер, он становится операцией удаления, а 3a существует только в Мастере, поэтому он становится операцией добавления. Данные и данные всегда поступают от Мастера (кроме, конечно, в случае удаления).
Заранее благодарим за любую помощь.
Прежде чем написать свой собственный алгоритм слияния, попробуйте [Oliver Becker's] (https://www2.informatik.hu-berlin.de/~obecker/XSLT/merge/merge.xslt.html). Сообщите нам, если он производит требуемый результат. –
Просьба указать XSLT 1.0 или 2.0. –
Спасибо за предложение. Я смотрю на это, и я, конечно, не эксперт, но, похоже, для этого потребуются немалые доработки, чтобы принести нужные мне результаты. Я смотрел на A intersect B (мое обновление), A, кроме B (мое добавление), и B, кроме A (мое удаление), как возможность, но я не уверен, как применить его еще – user3570518