我有一个XSD文件以及XML(我不了解的架构)。您可能会说XSD是存在的XML的架构,但是对我来说如何进行仍然不太了解。
在搜索过程中,我偶然发现了为达到该要求而准备的scalaxb包装。有人可以帮助我实现这一目标吗?在进行此类新操作之前,我还没有进行过此类XSD处理。尽管我得到了一个小代码,可以从XSD当前进行XML验证,这似乎还可以。但是提取是我现在遇到的困难。
由于我对XSD的了解有限,因此我无法区分哪个元素应被视为架构字段,哪些不应该被视为架构字段。感谢任何帮助。
XSD文件摘要:
<xs:element name="preList">
<xs:complexType>
<xs:sequence>
<xs:element name="nNumber" type="remNum"/>
<xs:element name="fileName" type="FileName"/>
<xs:element name="recordCnt" type="RecordCount"/>
<xs:choice maxOccurs="unbounded">
<xs:element ref="tfiws"/>
<xs:element ref="structured"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="tfiws">
<xs:complexType>
<xs:sequence>
<xs:element ref="header" minOccurs="0"/>
<xs:element name="tfMst" type="TFMsg"/>
<xs:element name="turns" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="tDate" type="SDate" minOccurs="0"/>
<xs:element name="direction" type="Direction" minOccurs="0"/>
<xs:element name="mstAmount" type="MSTAmount" minOccurs="0"/>
<xs:element name="minDate" type="EDate" minOccurs="0"/>
</xs:sequence>
<xs:attributeGroup ref="RequiredAttrs"/>
</xs:complexType>
</xs:element>
...and so on.
验证代码:
class validate {
def validateXML(xmlFilePath: String, xsdFilePath: String): Boolean = {
try{
val factory: SchemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
val schema: Schema = factory.newSchema(new File(xsdFilePath))
val validator: Validator = schema.newValidator()
validator.validate(new StreamSource(new File(xmlFilePath)))
true
}
catch {
case NonFatal(error) => error.printStackTrace()
false
}
}
}
答案 0 :(得分:0)
我已经绕过scalaxb
。将XSD转换为scala
中的类的最佳库。它从XSD创建了3个文件:一个具有XSD特质和类的scala代码,scalaxb.scala
(我仍在试图找出原因)和一个对应的XML示例文件。而已。一旦获得了类格式的分隔字段,此后就很容易创建架构。