scala – 我在哪里可以找到Scales Xml的一些代码示例
我正在解析非常大的xml文件> 40 MB.我刚刚开始使用
scala进行开发,所以我浏览了一些好的库,并偶然发现了
Scala Scales,它似乎非常擅长处理大文件.
我读过了: 然后测试了pullXml函数,以确保正确导入所有库. val pull = pullXml(new FileReader("/Users/mycrazyxml/tmp/large.xml")) while( pull.hasNext ){ pull.next match { case Left( i : XmlItem ) => // Handle XmlItem Logger.info("XmlItem: "+i) case Left( e : Elem ) => { // Handle Element Logger.info("Element: "+e) } case Right(endElem) => // Handle endElement Logger.info("Endelement: "+endElem) } } 这导致整个文件打印到控制台!太好了! 例如.以下XML具有多个Enterprise元素,这些元素可以包含一个或多个LocalUnit. <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE Info SYSTEM "info.dtd"> <Info> <Enterprise> <RegNo>12345678</RegNo> <Address> <StreetInfo> <StreetName>Infinite Loop</StreetName> <StreetNumber>1</StreetNumber> </StreetInfo> </Address> <EName> <Legal>Crazy Company</Legal> </EName> <SNI> <Code>00000</Code> <Rank>1</Rank> </SNI> <LocalUnit> <CFARNo>987654321</CFARNo> <LUType>1</LUType> <LUName>Crazy Company Gym</LUName> <LUStatus>1</LUStatus> <SNI> <Code>46772</Code> <Rank>1</Rank> </SNI> <SNI> <Code>68203</Code> <Rank>2</Rank> </SNI> <Address> <StreetInfo> <StreetName>Infinite Loop</StreetName> <StreetNumber>1</StreetNumber> </StreetInfo> </Address> </LocalUnit> <LocalUnit> <CFARNo>987654322</CFARNo> <LUType>1</LUType> <LUName>Crazy Company Restaurant</LUName> <LUStatus>1</LUStatus> <SNI> <Code>46772</Code> <Rank>1</Rank> </SNI> <SNI> <Code>68203</Code> <Rank>2</Rank> </SNI> <Address> <StreetInfo> <StreetName>Infinite Loop</StreetName> <StreetNumber>1</StreetNumber> </StreetInfo> </Address> </LocalUnit> </Enterprise> <Enterprise> <RegNo>12345671220</RegNo> <Address> <StreetInfo> <StreetName>Cupertino Road</StreetName> <StreetNumber>2</StreetNumber> </StreetInfo> </Address> <EName> <Legal>Fun Company HQ</Legal> </EName> <SNI> <Code>00000</Code> <Rank>1</Rank> </SNI> <LocalUnit> <CFARNo>987654321</CFARNo> <LUType>1</LUType> <LUName>Fun Company</LUName> <LUStatus>1</LUStatus> <SNI> <Code>46772</Code> <Rank>1</Rank> </SNI> <SNI> <Code>68203</Code> <Rank>2</Rank> </SNI> <Address> <StreetInfo> <StreetName>Cupertino road</StreetName> <StreetNumber>2</StreetNumber> </StreetInfo> </Address> </LocalUnit> </Enterprise> </Info> 把它们加起来.对于给定的xml,我应该如何使用pullXml来创建我的对象并使用它们调用save方法? 解决方法val xmlFile = resource(this,"/data/enterprise_info.xml") val xml = pullXml(xmlFile) val Info = NoNamespaceQName("Info") val Enterprise = NoNamespaceQName("Enterprise") val LocalUnit = NoNamespaceQName("LocalUnit") val LocalUnitName = NoNamespaceQName("LUName") val EName = NoNamespaceQName("EName") val Legal = NoNamespaceQName("Legal") val EnterprisePath = List(Info,Enterprise) // iterate over each Enterprise // only an Enterprise at a time is in memory val itr = iterate(EnterprisePath,xml) for { enterprise <- itr enterpriseName <- enterprise * EName * Legal } { println("enterprise "+text(enterpriseName) +" has units:") for { localUnits <- enterprise * LocalUnit localName <- localUnits * LocalUnitName }{ println(" " + text(localName)) } //do a save } 懒惰地拉入每个LocalUnit目前比较困难,你必须为每个不属于LocalUnit的子部分分别路径. 心连心 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |