#java #xml #xml-parsing #xsd
#java #xml #синтаксический анализ xml #xsd
Вопрос:
У меня есть xsd для структуры проверки XML, которая может отображаться с двумя типами одного и того же тега. поэтому я должен обработать эти оба сценария в моем xsd. Я искал и нашел альтернативный тег и тег выбора для выполнения моего требования, но не смог вставить в надлежащем формате:
ниже приведен тип тега:
Либо
<funcs>
<joint>
<functionName value=""/>
<indataType value=""/>
</joint>
</funcs>
или
<funcs path="myinfo.txt"/>
когда я вставляю альтернативный тег, обнаружено следующее исключение:
Exception: s4s-elt-must-match.1: The content of 'funcs' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: alternative.
Комментарии:
1. Можете ли вы опубликовать свой XSD?
Ответ №1:
Мой ответ поможет вам, если в ваших случаях возможно назвать тег ‘funcs’ по-другому.
Вы могли бы использовать этот XSD:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="root">
<xsd:complexType>
<xsd:choice>
<xsd:element ref="funcs_1"/>
<xsd:element name="funcs_2" type="f2"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="funcs_1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="joint" type="f1" maxOccurs="1" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="f1">
<xsd:sequence>
<xsd:element name="functionName" type="f3">
</xsd:element>
<xsd:element name="indataType" type="f3">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="f3">
<xsd:attribute name="value" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="f2">
<xsd:attribute name="path" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:schema>
Для проверки этих двух XML,
XML1:
<root>
<funcs_1>
<joint>
<functionName value=""/>
<indataType value=""/>
</joint>
</funcs_1>
</root>
XML2:
<root>
<funcs_2 path="myinfo.txt"/>
</root>