#java #xml #parsing #xmlbeans
#java #xml #синтаксический анализ #xmlbeans
Вопрос:
Используя этот упрощенный XSD (упрощенный, но все еще подробный, как и все XSD, как правило,):
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="[redacted]">
<xsd:element name="Statement" type="BILLINGSTATEMENTTYPEType"/>
<xsd:complexType name="BILLINGSTATEMENTTYPEType">
<xsd:sequence>
<xsd:element name="AccountSection" type="ACCOUNTSECTIONTYPEType"/>
<xsd:element name="DataSection" type="DATASECTIONTYPEType"/>
<xsd:element name="Summary" type="SUMMARYTYPEType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ACCOUNTSECTIONTYPEType">
<xsd:sequence>
<xsd:element name="Foo" type="xsd:string" maxOccurs="unbounded" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="DATASECTIONTYPEType">
<xsd:sequence>
<xsd:element name="Bar" type="xsd:string" maxOccurs="unbounded" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="SUMMARYTYPEType">
<xsd:sequence>
<xsd:element name="Baz" type="xsd:string" maxOccurs="unbounded" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Я сгенерировал JAR-файл (используя <xmlbean>
Ant-задачу из xmlbeans), и все выглядит великолепно, я получаю все нужные типы и еще много чего. Но когда я разберу этот упрощенный документ:
<Statement>
<AccountSection>
<Foo>bar</Foo>
</AccountSection>
<DataSection>
</DataSection>
<Summary>
</Summary>
</Statement>
Используя этот код:
public class XmlTest {
public static void main(String[] args) throws Exception {
File xmlFile = new File("./data/test.xml");
FileInputStream xmlStream = new FileInputStream(xmlFile);
BILLINGSTATEMENTTYPEType statement = BILLINGSTATEMENTTYPEType.Factory.parse(xmlStream);
ACCOUNTSECTIONTYPEType acctSection = statement.getAccountSection();
System.out.println(statement.xmlText());
System.out.println("acctSection is null:" (acctSection == null));
}
}
acctSection
(и любой из дочерних разделов, которые я пробовал) всегда имеют значение null, даже если он полностью анализирует документ.
Вывод:
<Statement>
<AccountSection>
<Foo>bar</Foo>
</AccountSection>
<DataSection>
</DataSection>
<Summary>
</Summary>
</Statement>
acctSection is null:true
Почему это null? Почему все они равны null? Я неправильно определил что-то где-то в моем XSD? Я успешно использовал xmlbeans раньше и никогда не сталкивался с этой проблемой, поэтому я уверен, что мне чего-то не хватает, но я не смог это найти.
Ответ №1:
Я сам не занимаюсь экспортом в xmlbeans, но я заметил, что вы использовали фабрику сложного типа для синтаксического анализа xml. Можете ли вы попробовать использовать StatementDocument.Factory
вместо этого?
Комментарии:
1. Это в значительной степени привело меня туда, куда мне нужно было идти. Затем возникла более серьезная проблема с пространством имен XML, но это помогло мне преодолеть эти дочерние элементы null, спасибо!
Ответ №2:
Моя проблема была решена путем добавления elementFormDefault="qualified"
в пространство имен моего .xsd
файла.