Класс DOMParser позволяет нам анализировать XML и HTML из строки, он встроен непосредственно в JavaScript/TypeScript, поэтому нам не нужно устанавливать стороннюю библиотеку для создания нашей функции проверки. Эта функция будет принимать параметр управления, который является рассматриваемым элементом управления формой. Функция валидатора должна выглядеть так:

MyCustomXMLValidator(control: AbstractControl){ 
   var domParser = new DOMParser(); ty
   var dom = domPraser.parseFromString(control.value, 'text/xml'); 
   if(dom.getElementByTagName('parsererror').length > 0) { 
       return { invalidXml: true}; 
   } 
   return null; 
}

Функция валидатора проанализирует строку XML, предоставленную параметром управления, с помощью класса DOMParser и проверит, не были ли обнаружены какие-либо ошибки синтаксического анализатора. Если обнаружена ошибка синтаксического анализатора, он вернет объект с ключом invalidXml, установленным в значение true. Если ошибок синтаксического анализа не обнаружено, он вернет null.

3. Используйте функцию валидатора в вашем элементе управления реактивной формой.

Наконец, вы должны использовать эту функцию валидатора в своем элементе управления реактивной формы. Для этого откройте компонент, в котором находится ваша реактивная форма, и добавьте MyCustomXMLValidator в массив валидаторов при объявлении элемента управления формой:

this.form = this.fb.group({ 
  xmlField: new FormControl('', [Validators.Required, MyCustomXMLValidator])
})

Этот код объявляет новую группу форм с полем под названием «xmlField», которое сообщает элементу управления реактивной формой использовать функцию проверки, которую вы создали ранее, для проверки любого введенного в нее значения.

Вот и все! Теперь вы успешно создали Angular Reactive Form Control Validator, который проверяет, является ли поле допустимым XML, используя класс DOMParser. Следуя этим шагам и используя этот код, вы можете легко создать Angular Reactive Form Control Validator, который проверяет правильность XML.

Спасибо за чтение. Если вам понравился этот блог, рассмотрите возможность подписаться на мою учетную запись Medium для ежедневных блогов на темы разработки программного обеспечения и технологий!