現在、40 MBを超える非常に大きなxmlファイルの解析を行っています。私はちょうどスカラで開発を開始したので、良いライブラリのためにネットを閲覧し、大きなファイルを扱う際には非常に良いと思われるScala Scalesを見つけました。Scales Xmlのコード例はどこにありますか
私が読んでいる:、 http://scala-scales.googlecode.com/svn/sites/scales/scales-xml_2.9.1/0.2/ScalesXmlIntro.html http://scala-scales.googlecode.com/svn/sites/scales/scales-xml_2.9.2/0.4.4/PullParsing.html
をしてから、すべてのlibsが正しくインポートされていることを確認するために、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)
}
}
この結果、ファイル全体がコンソールに出力されます。ニース! これで、オブジェクトを作成してdbに保存するときですが、これをどのようにして良い方法で行うのかを把握するのに、 の問題があります。私は実際にこれを行う方法の良い例が 必要になります。
例:以下のXMLには、1つまたは複数のLocalUnitで構成できる複数のEnterprise要素があります。 ここでの考え方は、LocalUnitsの配列でEnterpriseオブジェクトを作成することです。 endElementがエンタープライズコールの終了タグの場合、Enterpriseオブジェクトを使用したsaveメソッドはLocalUnitsで終了します。
<?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に対して、私はどのように私のオブジェクトを作成し、それらと一緒にsaveメソッドを呼び出すためにpullXmlを使うべきですか?なまけそれぞれにLocalUnit引っ張る
ありがとうございました!これはまさに私が探していたものでした! text()メソッドは、あなたが自分で宣言したものか、スケールでヘルパーメソッドですか?私のアイデアはインポートを見つけることができません。 – jakob
OK xpath.Functions.text()が見つかりました。なぜ私のアイデアはこれを解決しないのですか? – jakob