Генерация XML-файла из XSD вызывает нежелательный префикс на корневом узле - PullRequest
1 голос
/ 07 июля 2011

Я использую шпион XML для автоматической генерации файла XML из XSD.Тем не менее, всегда кажется, что мой корневой элемент имеет префикс n1: или n2: например, он будет генерировать что-то вроде следующего:

<?xml version="1.0"?>
<n2:EmployeeData>
   <Employee>
     <name>xyz</name>
     <dateOfBirth>10.10.10</dateOfBirth>
     <email>a@a.com</email>
   </Employee>
</n2:EmployeeData>

Я бы хотел, чтобы он генерировал следующее:

<?xml version="1.0"?>
<EmployeeData>
   <Employee>
     <name>xyz</name>
     <dateOfBirth>10.10.10</dateOfBirth>
     <email>a@a.com</email>
   </Employee>
</EmployeeData>

Ответы [ 2 ]

2 голосов
/ 07 июля 2011

Это похоже на то, когда в Java не установлен JAXB NamespacePrefixMapper. Если вы объявите пространство имен uri и префикс, то XML будет сгенерирован с правильным префиксом (или без префикса) и пространством имен uri. Проверка в XML Spy имеет опцию для установки префиксов пространства имен.

0 голосов
/ 11 июля 2011

Прежде всего: пространства имен являются фундаментальной концепцией в XML. Если вы не знакомы с пространствами имен, пожалуйста, найдите время, чтобы изучить и понять их.Несмотря на то, что пространства имен являются URI, им не нужно (но можно) указывать на любую существующую веб-страницу.Это просто уникальные идентификаторы.

Поскольку ваша XML-схема имеет целевое пространство имен, корневой элемент экземпляра документа должен находиться в этом пространстве имен.При желании вы можете использовать другой префикс пространства имен в вашем экземпляре документа, просто убедитесь, что у вас также есть определение пространства имен, которое связывает ваш префикс с этим требуемым целевым URI пространства имен.Как прокомментировал @skaffman, размещенный вами XML на самом деле не является правильно сформированным, потому что он использует префикс пространства имен без преобразования префикса в пространство имен.Другой способ решить вашу проблему - удалить префикс и определить пространство имен по умолчанию в корневом элементе.Если ваш экземпляр документа не должен находиться в каком-либо пространстве имен, тогда ваша схема неверна и ее следует исправить, удалив атрибут targetNamespace.

Кстати, в вашем документе только корневой элемент принадлежитПространство имен.Это не обычная практика, и я предполагаю, что в этом случае такой результат был вызван непреднамеренной функцией в вашем документе схемы.По умолчанию только те элементы, которые объявлены глобально в документе схемы, будут находиться в целевом пространстве имен.Это можно изменить, установив атрибут elementFormDefault="qualified" в элементе <xs:schema>.Этот атрибут гарантирует, что также элементы, которые локально объявлены в этой схеме, принадлежат целевому пространству имен.Значением по умолчанию для этого атрибута является false, которое применяется, если атрибут отсутствует.

...