LINUX.ORG.RU

[Qt xml nameSpace]Получение описания поля из схемы


0

1

Вопрос про использование xml схем в Qt
Есть у меня xml-ка которую надо распарсить:

<?xml version='1.0'?>
<sen:SigEnvelope xmlns:sen="urn:cbr-ru:dsig:env:v1.1">
value
</sen:SigEnvelope>
Отдельно есть схема для нее (насколько понял - выбор схемы задается вот этой строкой xmlns:sen=«urn:cbr-ru:dsig:env:v1.1»)
	<xs:element name="SigEnvelope" type="sen:SigEnvelopeType">
		<xs:annotation>
			<xs:documentation>Конверт ЭЦП (КА)</xs:documentation>
		</xs:annotation>
	</xs:element>

файл прочитал QDomDocument fileXML.setContent(&openedFile)
Можно ли сделать что-то подобное:
QXsd XMLnamespace = QXsd.open("nameSpace.xsd");
QString nodeDescr = QXsd.getNodeDescription(fileXML.node());
- то есть отдать куда-то файл схемы и ветку xml и получить обратно описание (в данном случае «Конверт ЭЦП (КА)»)?


выбор схемы задается вот этой строкой xmlns:sen=«urn:cbr-ru:dsig:env:v1.1»

Это простанство имён, оно со схемой не связано.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Хм...
Но по крайней мере при помощи вот этого xmlns:sen="..." можно определить файл схемы (один из нескольких используемых для конкретного файла).
Тогда по другому вопрос - если есть xml и схема - вытащить описание этого поля?
Можно, конечно, брутфорсом пройтись по файлу схемы, но хочется это сделать красивее

spdooh
() автор топика
Ответ на: комментарий от fluorite

Ога, читал.

This example shows how to use QtXmlPatterns to validate XML with a W3C XML Schema.
Там таки используется QXmlSchemaValidator
QXmlSchemaValidator validator(schema);
if (!validator.validate(instanceData))
И до места <xs:documentation>Конверт ЭЦП (КА)</xs:documentation> никак (имхо?) не доберешься.

Плюс стандартный валидатор у меня не работал на таких вот схемах которые с инклюдами и инсертами из других файлов схем:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ed="urn:cbr-ru:ed:v2.0" xmlns:lt="urn:cbr-ru:ed:leaftypes:v2.0" targetNamespace="urn:cbr-ru:ed:v2.0" version="2.4.3">
	<xs:include schemaLocation="cbr_ed_objects_v2.4.3.xsd"/>
	<xs:import namespace="urn:cbr-ru:ed:leaftypes:v2.0" schemaLocation="cbr_ed_leaftypes_v2.4.3.xsd"/>

spdooh
() автор топика
Ответ на: комментарий от spdooh

У стандартного валидатора много багов. Лично я только 2 запостил с год назад, их до сих пор не исправили. Для валидации схем лучше использовать Xerces.
Просто так до xs:documentation не доберёшься, только парсингом через QDomDocument и QXmlElement.

UVV ★★★★★
()
Ответ на: комментарий от UVV

Типо берешь файлики и ручками роешься в них, пока не найдешь нужный тег?
//И это в то время как наши звездолеты бороздят... (
Спасибо! расстроил(

spdooh
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.