2015-04-24 3 views
2

Вот мой XML:Используйте локальный XSD для документа XML

<?xml version="1.0" encoding="UTF-8"?> 
<linii xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="file:///C:/Users/Cosmin/Desktop/MyApplication/app/src/main/res/values/linii.xsd"> 
    <linia id="1"> 
     <indicativ>19</indicativ> 
     <nume>Auchan</nume> 
     <traseu>1</traseu> 
    </linia> 

    <linia id="2"> 
     <indicativ>20</indicativ> 
     <nume>Carrefour ERA</nume> 
     <traseu>2</traseu> 
    </linia> 
</linii> 

И мой XSD

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema attributeFormDefault="unqualified" 
      elementFormDefault="qualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="linii"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="linia" maxOccurs="unbounded" minOccurs="0"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element type="xs:byte" name="indicativ"/> 
          <xs:element type="xs:string" name="nume"/> 
          <xs:element type="xs:byte" name="traseu"/> 
         </xs:sequence> 
         <xs:attribute type="xs:byte" name="id" use="optional"/> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

Я получаю следующее сообщение об ошибке:

Element linii must be declared

Почему? Я работаю в Android Studio. CoreFiling проверить и XML, и XSD.

+0

Я думаю, что вы должны использовать 'XSI: noNamespaceSchemaLocation = "C: /Users/Cosmin/Desktop/MyApplication/app/src/main/res/values/linii.xsd"' – Xstian

+0

Это еще хуже, путь не признается таким образом. –

+0

Как предложено в [этой ссылке] (https://msdn.microsoft.com/en-us/library/ms757863 (v = vs.85) .aspx) .. после 'file:' помещать только два '/' not три. – Xstian

ответ

0

Ваш XML-документ и ваш XSD прекрасны, а ваш XML-документ действителен в отношении вашего XSD.

Правильно указан формат файла, указанный xsi:noNamespaceSchemaLocation. (Да, он должен иметь три разделителя /, как и у вас - file:// плюс (пустой) спецификатор машины плюс еще один /, за которым следует путь к каталогу. Большинство процессоров XML (в том числе основанных на широко используемом синтаксическом анализаторе XML, Xerces) (MSXML), к сожалению, возможно.)

Так почему же процессор не находит ваш XSD, если все это правильно?

Возможно, на пути к файлу есть ошибка, отличная от точки.

Вот как найти ошибку (или ошибки) по пути к файлу:

  1. Введите полный локальный URI (file:///C:/Users/Cosmin/Desktop/MyApplication/app/src/main/res/values/linii.xsd) в Chrome или Firefox. Если появляется XSD , вы знаете, что ваша спецификация для XSD верна, и вы можете указать, что ваш XML-процессор имеет idiosyncratic expectation.
  2. Если XSD не найден, удалите XSD и посмотрите, отображается ли каталог . Если отображается список каталогов, то у вас неправильно написано XSD; почини это. Если список каталогов не отображается, все еще есть ошибка где-то выше по пути. Продолжайте , вырывая родительские каталоги и проверяя, видите ли вы каталог , пока не найдете место на пути, где реальность ваша файловая система отличается от того, что указано в пути XSD.
Смежные вопросы