私が認識していないスキーマである XML と共に XSD ファイルがあります。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
}
}
}