Фон:
Мы создаем приложение, которое позволяет нашим клиентам предоставлять данные в предопределенном (т.е. не контролирую) формате XML. XSD поставляется нам третьей стороной, и мы ожидаем получить XML файл, который передает проверку схемы до того, как мы ее обработаем.
Проблема:
XSD, к которому мы поставляем, включает пространство имен по умолчанию и целевое пространство, что означает, что если клиент поставляет XML файл, который не включает пространство имен, тогда проверка будет проходить. Мы, очевидно, не хотим, чтобы они поставляли вещи, которые говорят, что они проходят, но не должны, но большая проблема связана с массой дополнительных проверок, которые нам понадобятся для каждого элемента, если я не смогу найти решение проверка XML.
Вопросы:
Можно ли заставить .NET выполнить проверку и игнорировать пространство имен на поставляемом XML и XSD. то есть каким-то образом "предположить", что пространство имен было присоединено.
- Можно ли легко и надежно удалить пространства имен в памяти?
- Какова наилучшая практика в этих ситуациях?
Решения, которые у меня есть до сих пор:
- Удалять пространство имен из XSD каждый раз, когда оно обновляется (не должно быть очень часто. Это не оборачивается тем фактом, что если они будут поставлять пространство имён, оно все равно будет проходить проверку.
- Удалите пространство имен из XSD и найдите способ сбрасывать пространство имен из входящего XML каждый раз. Это похоже на много кода, чтобы выполнить что-то простое.
- Предоставляет ли какая-либо предварительная квалификация файла XML, прежде чем он будет проверен, чтобы убедиться, что он имеет правильное пространство имен. Кажется неправильным провалить их из-за неправильного пространства имен, если содержимое файла верное.
- Создайте дубликат XSD, у которого нет пространства имен, однако, если они просто поставляют неправильное пространство имен или другое пространство имен, оно все равно пройдет.
Пример Xml:
<?xml version="1.0"?>
<xsd:schema version='3.09' elementFormDefault='qualified' attributeFormDefault='unqualified' id='blah' targetNamespace='urn:schemas-blah.com:blahExample' xmlns='urn:blah:blahExample' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
...
</xsd:schema>
с пространством имен, которое отличается от
<?xml version="1.0" encoding="UTF-8" ?>
<root xmlns="urn:myCompany.com:blahExample1" attr1="2001-03-03" attr2="google" >
...
</root>
без пространства имен вообще.
<?xml version="1.0" encoding="UTF-8" ?>
<root attr1="2001-03-03" attr2="google" >
...
</root>