Я пишу программный продукт, который принимает XML от наших клиентов.
У xml есть 2 части, стандартная часть, которая содержит поля набора, и часть свободной формы, которая позволяет нашим клиентам добавлять свои собственные xml
<OverallDocument>
<SetFields>
<name>Jon Doe</name>
<age>24</age>
<sex>M</sex>
</SetFields>
<FreeXML>
<!--custom xml goes here-->
</FreeXML>
</OverallDocument>
Система настроена таким образом, что у TotalDocument есть схема, которая охватывает все разделы xml, кроме того, что входит в теги FreeXML.
Содержимое тегов FreeXML имеет собственную схему, отправленную нам нашим клиентом.
<OverallDocument>
<SetFields>
<name>Jane Doe</name>
<age>30</age>
<sex>F</sex>
</SetFields>
<FreeXML>
<Custom1>
<CustomString>aaaaaa</CustomString>
<CustomInt>12345</CustomInt>
</Custom1>
</FreeXML>
</OverallDocument>
В этом случае xml клиента выглядит так
<Custom1>
<CustomString>aaaaaa</CustomString>
<CustomInt>12345</CustomInt>
</Custom1>
Программа пытается извлечь клиентский XML-файл для дальнейшей обработки.
Пока проблем нет. все это хорошо читается в xmldocument.
К сожалению, некоторые из наших клиентов используют префиксы пространства имен в своих пользовательских xml, не объявляя префиксы в документе xml.
<OverallDocument>
<SetFields>
<name>Jane Doe</name>
<age>30</age>
<sex>F</sex>
</SetFields>
<FreeXML>
<hl:Custom1>
<CustomString>aaaaaa</CustomString>
<CustomInt>12345</CustomInt>
</hl:Custom1>
</FreeXML>
</OverallDocument>
Это приводит к падению xmldocument, так как префиксы не объявлены в xml. Я попытался обойти это путем удаления всех префиксов пространства имен из кода, но это вызывает проблемы позже при обработке, поскольку схемы клиентов требуют, чтобы префиксы были в тегах.
некоторые дальнейшие проблемы
- У нас много клиентов с разными
схемы и разные пространства имен.
- Каждый XML-файл может иметь несколько
Элементы FreeXML в разных
разделы (поэтому невозможно
просто извлеките раздел FreeXML как
разные клиенты используют 1 или более и
использовать разделы в разных местах
по всему документу.
- Мы не можем редактировать схему клиентов.
- Мы не можем сказать клиентам сортировать
их разыгрывают и пишут рабочие xml.
В идеале было бы лучше, если бы мы могли просто указать пространство имен и префикс для читателя xmldocument.
например,
dim xdoc as xmldocument = xmldocument
'add namespace and prefix
xdoc.loadxml(xmlcode)