2017-02-21 6 views
0

У меня есть XML-файл с несколькими полями. Одно из полей - ссылочный номер (уникальный). Другое поле - это идентификатор профиля (не единственный), который всегда одинаковый для всех списков.Изменить значение поля xml в зависимости от значений из списка

Отдельно у меня есть список ссылочных номеров и их идентификаторы профиля (в файле excel). То, что я хочу сделать, автоматически соответствует полю ссылочного номера и изменяет поле идентификатора профиля в xml в соответствии со списком, так что в результате xml будет иметь правильный список ссылочных номеров и их соответствующих идентификаторов профиля из список вместо общего, того же профиля, который у них есть сейчас.

Возможно ли это?

В приведенном ниже примере поле z303-profile-id одинаково для обоих покровителей, каждый из которых имеет уникальный идентификатор в z303-ref, а первый - в списке в списке.

спасибо.

Пример:

<patron-record> 
    <z303> 
     <z303-ref>000018804</z303-ref> 
     <z303-profile-id>USE_MSL</z303-profile-id> 
    </z303> 
</patron-record> 
<patron-record> 
    <z303> 
     <z303-ref>000018867</z303-ref> 
     <z303-profile-id>USE_MSL</z303-profile-id> 
    </z303> 
</patron-record> 

Список:

000018804    full staff 
000018867    Tester 

Результат:

<patron-record> 
    <z303> 
     <z303-ref>000018804</z303-ref> 
     <z303-profile-id>full staff</z303-profile-id> 
    </z303> 
</patron-record> 
<patron-record> 
    <z303> 
     <z303-ref>000018867</z303-ref> 
     <z303-profile-id>Tester</z303-profile-id> 
    </z303> 
</patron-record> 
+0

Какой язык программирования вы хотите использовать? – choroba

+0

Какой язык может быть выполнен самым простым способом. Я знаю только jquery, C# и такие вещи, как HTML5 и CSS, поэтому мне нужно научиться делать это с нуля. –

+0

Можете ли вы удалить ненужные элементы и вместо этого показать, как повторяются записи? – choroba

ответ

2

Вот как вы можете это сделать в xsh, инструмент Я произойти, чтобы сохранить:

perl { 
    open my $LST, '<', shift or die $!; 
    while (<$LST>) { 
     chomp; 
     my ($ref, $id) = split ' ', $_, 2; 
     $profile_id->{$ref} = $id; 
    } 
} ; 
open { shift }; 
for //patron-record/z303 { 
    my $new_id = xsh:lookup('profile_id', z303-ref) ; 
    if $new_id set z303-profile-id $new_id ; 
} 
save :b ; 

Позвоните в

xsh -al script.xsh file.lst file.xml 

Если бы вы указали список в файле XML тоже код был бы намного проще.

+0

К сожалению, этот список предоставляется мне из внешнего источника, но его можно было бы преобразовать. Я проверю :) Это код для пакетного файла, который мне нужно запустить? Спасибо большое! : D –

+1

Это скрипт 'xsh', который вы можете запустить, а следующий блок показывает, как запустить его из командной строки или скрипта. – choroba

+0

Вы написали файл.lst - это мой файл xls справа? –