Мне было трудно сформулировать название вопроса.Возможно, в этом примере будет больше смысла.
Предположим, у меня есть XML-документ, который выглядит так из системы A:
<root>
<phone_numbers>
<phone_number type="work">123-WORK</phone_number>
<phone_number type="home">456-HOME</phone_number>
<phone_number type="work">789-WORK</phone_number>
<phone_number type="other">012-OTHER</phone_number>
</phone_numbers>
<email_addresses>
<email_address type="home">a@home</email_address>
<email_address type="other">b@other</email_address>
<email_address type="home">c@home</email_address>
<email_address type="work">d@work</email_address>
<email_address type="other">e@other</email_address>
<email_address type="other">f@other</email_address>
</email_addresses>
</root>
И я должен вписать их в такую структуру, чтобы ониможет использоваться в системе B:
<root>
<addresses>
<address name="work1">
<phone_number>123-WORK</phone_number>
<email_address>d@work</email_address>
</address>
<address name="work2">
<phone_number>789-WORK</phone_number>
</address>
<address name="other1">
<phone_number>012-OTHER</phone_number>
<email_address>b@other</email_address>
</address>
<address name="other2">
<email_address>e@other</email_address>
</address>
<address name="other3">
<email_address>f@other</email_address>
</address>
<address name="home1">
<phone_number>456-HOME</phone_number>
<email_address>a@home</email_address>
</address>
<address name="home2">
<email_address>c@home</email_address>
</address>
</addresses>
</root>
Может быть любое число (от 0 до бесконечности, насколько я знаю) адресов электронной почты каждого типа.Также может быть любое количество телефонных номеров каждого типа, и количество телефонных номеров одного типа не должно совпадать с количеством адресов электронной почты одного типа.
Адреса электронной почты и номера телефонов впервый документ на самом деле не имеет отношения друг к другу, за исключением того, что они вводятся в том порядке, в котором они были добавлены в систему A.
Мне нужно объединить электронные письма и номера телефонов по типу, чтобы вписаться в систему B, и я хотел бы соединить их так, чтобы первый номер телефона типа X был связан с первым адресом электронной почты типа X, и чтобы ни один номер телефона типа X не был связан с адресом электронной почты, отличным от X.
Поскольку я должен их объединить, и поскольку порядок их ввода в систему наиболее близок, я смогу найти взаимосвязь между парами, я хотел бы упорядочить их таким образом.Я должен сказать пользователям, чтобы они просматривали результаты, чтобы убедиться, что они имеют смысл, но я должен их объединить - нет выбора.
Чтобы усложнить ситуацию, в моем настоящем документе XML есть больше узлов, которые яМне нужно объединить с phone_numbers и email_addresses, и у меня есть более двух @types
.
Еще одно примечание: я уже вычисляю максимальное количество узлов с любым заданным @type
, поэтому с моимНапример, я знаю, что максимальное число <address>
узлов одного @type
равно трем (три <email_address>
узла с @type=other
= три <address>
узла с @name=otherX
).