#c# #xml #xslt #schema #biztalk
#c# #xml #xslt #схема #biztalk
Вопрос:
Моя ситуация такова: поле «Code» из исходного дерева должно быть сопоставлено с полем «Code» в дереве назначения. Поле «Код» в дереве назначения имеет 2 родительских узла. Для проверки схемы назначения один и тот же код не должен встречаться более одного раза в области видимости 2-го родительского узла. Вот изображение иерархии:
Таким образом, в рамках «PurchaseInformation» не может встречаться одинаковый «Код». Циклический функтоид зацикливается на «GoodsDescription». Я пытался создать встроенный скрипт C # для обработки этого, но он не учитывает область видимости. Смотрите код ниже:
public System.Collections.Generic.List<string> duplicateList = new System.Collections.Generic.List<string>();
public bool IsDuplicate(string code)
{
if( duplicateList.Contains(code)) {
return false;
}
else {
duplicateList.Add(code);
return true;
}
}
Моя проблема заключается в глобальном списке, который создается. Он не сбрасывается после каждого цикла, но я не уверен, как реализовать эту функциональность. Мой вопрос в том, как я могу убедиться, что никакие повторяющиеся коды не отображаются в пределах области записи «PurchaseInformation» в дереве назначения?
Комментарии:
1. Есть ли в PurchaseInformation уникальный элемент, например ReferenceNumber? Затем объедините ReferenceNumber и код в качестве входных данных для вашей функции isDuplicate
2. Поле PurchaseInformation находится в схеме назначения. Извините, если я не прояснил это в своем сообщении. Хотя поля во входной схеме очень похожи. Я посмотрю, является ли одно из них уникальным, и использую это для объединения с кодом.
Ответ №1:
Не видя всего процесса, трудно дать то, что могло бы быть лучшим решением … но…
Вместо того, чтобы пытаться сбросить коллекцию (есть причины, по которым это сложно), вы могли бы попробовать вместо этого список списков.
Предполагая, что SimplifiedInvoice — это идентификатор или что-то в этом роде, вы можете использовать словарь списков, который будет отслеживать списки уникальных значений кода для каждого счета.