powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Создание XML по XSD
13 сообщений из 13, страница 1 из 1
Создание XML по XSD
    #33228394
Plut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая проблема
по существующей XSD построить пустой XML
как это лучше реализовать?
программно(парсить XSD и вытаскивать элементы)?
применить XSL к XSD?
а может в парсерах уже есть встроенные функции?
...
Рейтинг: 0 / 0
Создание XML по XSD
    #33230776
deepsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вариант: использовать XMLBeans - позволяет по xsd сгенерировать классы, потом обход дерева классов, анализ узлов и генерация хмл.
Stylus Studio позволяет генерировать хмл по хсд, но бесплатных библиотек не знаю.
...
Рейтинг: 0 / 0
Создание XML по XSD
    #33230814
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может кто подскажет - как валидировать xml по xsd? Вот вчитал я некий xml и хочу проверить соответствует ли он xsd - как сделать? Предпочтительно в jdom-е
...
Рейтинг: 0 / 0
Создание XML по XSD
    #33230886
Анони м
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NaugА может кто подскажет - как валидировать xml по xsd? Вот вчитал я некий xml и хочу проверить соответствует ли он xsd - как сделать? Предпочтительно в jdom-еjavax.xml.parsers.DocumentBuilderFactory 1.4



boolean isValidating()

void setValidating(boolean value)

are the "validating" property of the factory. If set to true, the parsers that this factory generates validate their input.
...
Рейтинг: 0 / 0
Создание XML по XSD
    #33231497
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл в jdom-e у SAXBuilder-а методы setFeature и setProperty Смущает следующее-

NOTE: SAXBuilder requires that some particular features of the SAX parser be
set up in certain ways for it to work properly. The list of such features
may change in the future. Therefore, the use of this method may cause
parsing to break, and even if it doesn't break anything today it might
break parsing in a future JDOM version, because what JDOM parsers require
may change over time. Use with caution.

Есть другой способ? Можно ли это более надёжно сделать в стандартном доме? Есть ахтунг что ссылка на xsd не указана в самом xml-e, а приходит извне
...
Рейтинг: 0 / 0
Создание XML по XSD
    #33231997
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анони м - ссылка на xsd у меня не является частью xml, а приходит "со стороны" - как сообщить парсеру что её надо использовать?

то что я сказал раньше про jdom отпадает так- как эти методы не реализованы в той версии jdom-a что стоит у нас, а менять её я не могу
...
Рейтинг: 0 / 0
Создание XML по XSD
    #33232715
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит проблема провалидировать xml файл по xsd схеме.
xml
Код: plaintext
1.
2.
3.
4.
5.
6.
<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me  this  weekend!</body>
</note>
xsd:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="note">
    <xs:complexType>
      <xs:sequence>
	<xs:element name="to" type="xs:string"/>
	<xs:element name="from" type="xs:string"/>
	<xs:element name="heading" type="xs:string"/>
	<xs:element name="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

Я пытаюсь вылидировать вставив в ксеркс параметры
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  public   static   void  dom4j(){
         SAXReader reader =  new  SAXReader();
         try  {
            reader.setValidation(true);

            // specify the schema to use
            reader.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation","schema.xsd");
//            reader.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation","schema.xsd");
            org.dom4j.Document validationDoc = reader.read("file.xml");
            org.dom4j.Element root = validationDoc.getRootElement();
        }  catch  (DocumentException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }  catch  (SAXException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
    }


Если я выставляю свойство "external-noNamespaceSchemaLocation"то получаю облом в виде
Код: plaintext
org.xml.sax.SAXParseException: TargetNamespace. 2 : Expecting no namespace, but the schema document has a target namespace.

Если external-schemaLocation то
Код: plaintext
org.xml.sax.SAXParseException: cvc-elt. 1 : Cannot find the declaration of element 'note'.

Соответственно вопрос - где глюк?
...
Рейтинг: 0 / 0
Создание XML по XSD
    #33238254
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NaugА может кто подскажет - как валидировать xml по xsd? Вот вчитал я некий xml и хочу проверить соответствует ли он xsd - как сделать? Предпочтительно в jdom-е

http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPSAX9.html#wp90294 for SAX

http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPDOM8.html#wp76446 for DOM

это для JAXP. Только в jdk1.4 и ниже, стандартный парсер, Crimson который, валидацию на основе XMLСхемы не поддерживает, качай xerces.
...
Рейтинг: 0 / 0
Создание XML по XSD
    #33240858
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фенька была в строчке
targetNamespace="http://www.w3schools.com"
в схеме, убрав её всё стало нормально, что впринципе соответствует ошибке
org.xml.sax.SAXParseException: TargetNamespace.2: Expecting no namespace, but the schema document has a target namespace.

Хотя с другой стороны и cхема и хмл взяты с w3schools и нормально там работали
...
Рейтинг: 0 / 0
Создание XML по XSD
    #33312464
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как узнать какой парсер используется (jdk1.4)
...
Рейтинг: 0 / 0
Создание XML по XSD
    #33312617
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NaugА как узнать какой парсер используется (jdk1.4)
Код: plaintext
.getClass().getName();
?
...
Рейтинг: 0 / 0
Создание XML по XSD
    #33314194
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        System.out.println(factory.getClass().getName());
        DocumentBuilder builder = factory.newDocumentBuilder();
        System.out.println(builder.getClass().getName());
Выдаёт
weblogic.xml.jaxp.RegistryDocumentBuilderFactory
weblogic.xml.jaxp.RegistryDocumentBuilder

Вот который из них парсер и как указать что мне нужен другой?
...
Рейтинг: 0 / 0
Создание XML по XSD
    #33314357
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naug
Код: plaintext
1.
2.
3.
4.
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        System.out.println(factory.getClass().getName());
        DocumentBuilder builder = factory.newDocumentBuilder();
        System.out.println(builder.getClass().getName());
Выдаёт
weblogic.xml.jaxp.RegistryDocumentBuilderFactory
weblogic.xml.jaxp.RegistryDocumentBuilder

Вот который из них парсер и как указать что мне нужен другой?

weblogic.xml.jaxp.RegistryDocumentBuilder - парсер, имплементация DocumentBuilder. Что довольно логично :)



java.sun.comQ. How do I use a different JAXP compatible implementation?

The JAXP 1.1 API allows applications to plug in different JAXP compatible implementations of parsers or XSLT processors. For example, when an application wants to create a new JAXP DocumentBuilderFactory instance, it calls the staic method DocumentBuilderFactory.newInstance(). This causes a search for the name of a concrete subclass of DocumentBuilderFactory using the following order:
The value of a system property like javax.xml.parsers.DocumentBuilderFactory if it exists and is accessible.
The contents of the file $JAVA_HOME/jre/lib/jaxp.properties if it exists.
The Jar Service Provider discovery mechanism specified in the Jar File Specification. A jar file can have a resource (i.e. an embedded file) such as META-INF/services/javax.xml.parsers.DocumentBuilderFactory containing the name of the concrete class to instantiate.
The fallback platform default implementation.

Of the above ways to specify an implementation, perhaps the most useful is the jar service provider mechanism. To use this mechanism, place the implementation jar file on your classpath. For example, to use Xerces 1.4.4 instead of the version of Crimson which is bundled with JDK 1.4 (Java Development Kit version 1.4), place xerces.jar in your classpath. This mechanism also works with older versions of the JDK which do not bundle JAXP. If you are using JDK 1.4 and above, see this question for potential problems.

тынц
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Создание XML по XSD
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]