Я использую ColdFusion (openBlueDragon) для вставки данных из большого (200 МБ) XML-файла в базу данных без необходимости загружать весь файл в память, как я обычно это делал. Я нашел ОЧЕНЬ ПОДОБНЫЙ ВОПРОС здесь: Цикл по большому XML-файлу , который, кажется, является ответом, который я ищу.
Однако я не достаточно опытен в Java, чтобы понимать и адаптировать код под мои нужды. Я не нашел способа ответить эксперту (@orangepips), который разместил код, иначе я бы не стал публиковать подобный вопрос.
Мой xml-файл выглядит так:
<allItems>
<item>
<subject>The subject text</subject>
<date>2007-05-21 04:03:00</date>
<content>text content often contains many paragraphs of text</content>
<author>JPass78</author>
</item>
</allItems>
Это код, любезно предоставленные апельсины, которые я пытаюсь адаптировать для своих целей. Я немного изменил это, чтобы включить мои собственные имена полей:
<cfset fis = createObject("java", "java.io.FileInputStream").init(
"#getDirectoryFromPath(getCurrentTemplatePath())#/file.xml")>
<cfset bis = createObject("java", "java.io.BufferedInputStream").init(fis)>
<cfset XMLInputFactory = createObject("java", "javax.xml.stream.XMLInputFactory").newInstance()>
<cfset reader = XMLInputFactory.createXMLStreamReader(bis)>
<cfloop condition="#reader.hasNext()#">
<cfset event = reader.next()>
<cfif event EQ reader.START_ELEMENT>
<cfswitch expression="#reader.getLocalName()#">
<cfcase value="allItems">
<!--- root node, do nothing --->
</cfcase>
<cfcase value="item">
<!--- set values used later on for inserts, selects, updates --->
</cfcase>
<cfcase value="subject">
<!--- some selects and insert --->
</cfcase>
<cfcase value="contentdate">
<!--- insert or update --->
</cfcase>
<cfcase value="content">
</cfcase>
<cfcase value="author">
</cfcase>
</cfswitch>
</cfif>
</cfloop>
<cfset reader.close()>
У меня есть одна таблица, и я пытаюсь выяснить, как мне получить доступ к значениям из каждого элемента XML, чтобы я мог вставлять его по одной строке за раз? как это: INSERT INTO контент (тема, контентдата, контент, автор)
VALUES («Предметный текст», 2007-5-21 04:03:00, «текстовое содержание здесь», «JPass78»);