проверка файла схемы в локальном расположении с помощью saxparser - PullRequest
0 голосов
/ 27 ноября 2011

Я смотрел на http://docs.oracle.com/javaee/1.4/tutorial/doc/JAXPSAX9.html.

Вы можете связать XML-файл со схемой двумя способами: в приложении или в XML-документе. В приложении вы звоните

saxParser.setProperty(JAXP_SCHEMA_SOURCE,
    new File(schemaSource)); 

в xml вы добавите это

<documentRoot
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation='YourSchemaDefinition.xsd'
>

Проблема в том, что оба местоположения файла .xsd являются строками URL. Файл .xsd, который у меня есть, является локальной копией. Есть ли способ указать местоположение? может быть в качестве входного потока?

Ответы [ 2 ]

1 голос
/ 27 ноября 2011

Вы можете установить схему непосредственно на фабрике SAX Parser.

 SAXParserFactory factory = SAXParserFactory.newInstance();
 SchemaFactory schemafactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
 Schema sc = schemafactory.newSchema(new File("path to xsd file"));
 factory.setSchema(sc);

 SAXParser parser = factory.newSAXParser();
 parser.parse(file, handler);

Расположение xsd в xml-файле также может быть относительно xml-файла, поэтому, если ваш xsd присутствует вместе с xml-файлом локально, ваш текущий xml-файл должен работать.

0 голосов
/ 27 ноября 2011

Я предполагаю, что вы в Java.Если схема находится в пути к классам, вы, вероятно, можете использовать эту запись, чтобы получить ее: URL-адрес для загрузки ресурсов из пути к классам в Java

Наличие экземпляра schemaLocation может быть трудно обработать, еслиВы получаете файл XML от третьего лица.SchemaLocation может быть уже определено в XML и может привести к неправильной схеме (или вообще ничего).Если вы хотите добавить это программно, вам придется изменить целостность данных перед проверкой, это может быть рискованно.Для проверки, IMO, лучше доверять своей локальной копии.

...