1
특정 형식의 모든 요소를 가져 오기 위해 XML 파일을 반복 처리하려고 시도합니다. <Card>
. 이 유형에는 선택적 속성도있을 수 있습니다.선택적 속성을 가질 수있는 XML 요소를 반복하는 방법은 무엇입니까?
XML 샘플 :
<Lesson>
<Description>Description</Description>
<Card learnedTimestamp="1234567", isRepeatedByTyping="true", batch="5">
<FrontSide>Foo1</FrontSide>
<ReverseSide>Bar1</ReverseSide>
<InformationLine>Info1</InformationLine>
</Card>
<Card>
<FrontSide>Foo2</FrontSide>
<ReverseSide>Bar2</ReverseSide>
<InformationLine>Info2</InformationLine>
</Card>
</Lesson>
스칼라 코드 : <Card>
요소는 모든 속성이없는 경우
class XMLParser(fqFileName: String) {
val pauDoc: Elem = XML.loadFile(fqFileName)
def printXMLFile() = {
var cardCount = 0
val lesson = (pauDoc \\ "Lesson")
for(val card <- lesson \\ "Card"){
cardCount = cardCount + 1
println("Card No " + cardCount)
val frontSide = (card \\ "FrontSide").text
println("FrontSide Value: " + frontSide)
val reverseSide = (card \\ "ReverseSide").text
println("ReverseSide Value.text: " + reverseSide)
val infoLine = (card \\ "InformationLine").text
println("InformationLine Value: " + infoLine)
}
}
}
는하지만이 코드는 작동합니다. 아무도 내가 속성을 처리하는 방법을 알고 있습니까, 특히 옵션 인 경우?
피씨 : 이것은 예외입니다.
Exception in thread "main" org.xml.sax.SAXParseException: Element type "Card" must be followed by either attribute specifications, ">" or "/>".
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.seekCloseOfStartTag(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at scala.xml.factory.XMLLoader$class.loadXML(XMLLoader.scala:40)
at scala.xml.XML$.loadXML(XML.scala:40)
at scala.xml.factory.XMLLoader$class.loadFile(XMLLoader.scala:49)
at scala.xml.XML$.loadFile(XML.scala:40)
at de.htwg_konstanz.ecardman.common.XMLParser.<init>(XMLParser.scala:7)
at de.htwg_konstanz.ecardman.common.XMLParserMain$.main(XMLParserMain.scala:23)
at de.htwg_konstanz.ecardman.common.XMLParserMain.main(XMLParserMain.scala)
네, loadFile을 사용하면 어떻게 될지 예상됩니다. 그러나 가능한 경우 요소에서 속성에 액세스해야합니다. 그걸하는 법을 아십니까? –
DaHanz
omg, 죄송합니다 모든 것이 잘 작동합니다. 문제는 속성 사이의 ","입니다. : / – DaHanz