Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 XML с помощью SAX, помощь новичку  [new]
*Tank*
Member

Откуда: Москва
Сообщений: 10641
Вот вроде написала процедуру , она работает и вносит данные, но проблема в том что вносит данные только те которые я ловлю в StartElement. Те данные что в characters почему-то сначала ловятся а потом обнуляются. НУ как это исправить.

create or replace and compile java source named xml_ct as
import java.io.*;
import java.math.*;
import java.net.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import oracle.xml.parser.v2.*;

public class load_xml
extends HandlerBase {
String currentelement ;
String addrtype;
String TMP_TYPE;
String TMP_CODE;
String NAME_CUSTOMER;
String COMMENT_CUSTOMER;
String NAME_DESC;
String INN;
String INDEX_CUSTOMER;
String ADDR;
String RESIDENT;
String BIK;
String GROUP_CODE;
String STATUS_CUSTOMER;
String PARAMETR;
String ObjectName;
static int i=0;

public static void pStart(String argv) {
try {

Parser parser = new SAXParser();
load_xml loadxml = new load_xml();
parser.setDocumentHandler(loadxml);
InputSource xmldoc = new InputSource(new FileInputStream(argv));
parser.parse(xmldoc);
return;
}
catch (Exception e) {
System.out.println("Исключение при инициализации парсера: " + e);
return;
}
}

public void startElement(String name, AttributeList atts) {
try {
currentelement = name;
if (name == "Субъект") {
TMP_TYPE = atts.getValue(0);
ObjectName="Субъект";
TMP_CODE = atts.getValue(1);
}



}
catch (Exception e) {
System.out.println("Исключение в методе startElement: " + e);
return;
}
}


public void characters(char[] ch, int start, int length) {
try {

if (ObjectName=="Субъект"){
if (currentelement == "Название") {
NAME_CUSTOMER =new String(ch, start, length);
}
else if (currentelement == "Примечание") {
COMMENT_CUSTOMER = new String(ch, start, length);
}
else if (currentelement == "Полн_назв") {
NAME_DESC =new String(ch, start, length);
}
else if (currentelement == "ИНН") {
INN = new String(ch, start, length);
}
else if (currentelement == "Индекс") {
INDEX_CUSTOMER = new String(ch, start, length);
}
else if (currentelement == "Адрес") {
ADDR = new String(ch, start, length);
}
else if (currentelement == "БИК") {
BIK =new String(ch, start, length);
}
else if (currentelement == "Код_груп") {
GROUP_CODE = new String(ch, start, length);
}
else if (currentelement == "Статус") {
STATUS_CUSTOMER = new String(ch, start, length);
}
}
}

catch (Exception e) {
System.out.println("Исключение при получении значения узла: " + e);
return;
}
}

public void endElement(String name) {
try {


if (name == "Субъект") {
#sql {
insert into tmptable.xml_customer1(TMP_TYPE,TMP_CODE,NAME_CUSTOMER,COMMENT_CUSTOMER,NAME_DESC,INN,INDEX_CUSTOMER,ADDR,RESIDENT,BIK,GROUP_CODE,STATUS_CUSTOMER,PARAMETR)
values( : TMP_TYPE,: TMP_CODE, : NAME_CUSTOMER,: COMMENT_CUSTOMER,: NAME_DESC,: INN,: INDEX_CUSTOMER,: ADDR,: RESIDENT,: BIK,: GROUP_CODE,: STATUS_CUSTOMER,: PARAMETR)
};
TMP_TYPE="";
TMP_CODE="";
NAME_CUSTOMER="";
COMMENT_CUSTOMER="";
NAME_DESC="";
INN="";
INDEX_CUSTOMER="";
ADDR="";
RESIDENT="";
BIK="";
GROUP_CODE="";
STATUS_CUSTOMER="";
PARAMETR="";
#sql {commit};
}
}
catch (Exception e) {
System.out.println("Исключение в методе endElement: " + e);
return;
}
}

public void endDocument() {
System.out.println("Разбор документа окончен");
}
}
/
create or replace
procedure load_from_xml(fn in varchar2) as
language java
name 'load_xml.pStart(java.lang.String)';
/

P.S. Другие методы не подходят, у меня оочень большой фаил(400МБ).

К сообщению приложен файл (text_zzz.xml - 27Kb) cкачать
2 ноя 07, 10:05    [4868614]     Ответить | Цитировать Сообщить модератору
 Re: XML с помощью SAX, помощь новичку  [new]
*Tank*
Member

Откуда: Москва
Сообщений: 10641
Извините
create or replace and compile java source named xml_ct as
import java.io.*;
import java.math.*;
import java.net.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import oracle.xml.parser.v2.*;

public class load_xml
extends HandlerBase {
String currentelement ; 
String addrtype;
String TMP_TYPE;
String TMP_CODE;
String NAME_CUSTOMER;
String COMMENT_CUSTOMER;
String NAME_DESC;
String INN;
String INDEX_CUSTOMER;
String ADDR;
String RESIDENT;
String BIK;
String GROUP_CODE;
String STATUS_CUSTOMER;
String PARAMETR;
String ObjectName;
static int i=0;

public static void pStart(String argv) {
try {

Parser parser = new SAXParser(); 
load_xml loadxml = new load_xml();
parser.setDocumentHandler(loadxml);
InputSource xmldoc = new InputSource(new FileInputStream(argv));
parser.parse(xmldoc);
return;
}
catch (Exception e) {
System.out.println("Исключение при инициализации парсера: " + e);
return;
}
}

public void startElement(String name, AttributeList atts) {
try {
currentelement = name;
if (name == "Субъект") {
TMP_TYPE = atts.getValue(0);
ObjectName="Субъект";
TMP_CODE = atts.getValue(1);
}



}
catch (Exception e) {
System.out.println("Исключение в методе startElement: " + e);
return;
}
}


public void characters(char[] ch, int start, int length) {
try {

if (ObjectName=="Субъект"){
if (currentelement == "Название") {
NAME_CUSTOMER =new String(ch, start, length);
}
else if (currentelement == "Примечание") {
COMMENT_CUSTOMER = new String(ch, start, length);
}
else if (currentelement == "Полн_назв") {
NAME_DESC =new String(ch, start, length);
}
else if (currentelement == "ИНН") {
INN = new String(ch, start, length);
}
else if (currentelement == "Индекс") {
INDEX_CUSTOMER = new String(ch, start, length);
}
else if (currentelement == "Адрес") {
ADDR = new String(ch, start, length);
}
else if (currentelement == "БИК") {
BIK =new String(ch, start, length);
}
else if (currentelement == "Код_груп") {
GROUP_CODE = new String(ch, start, length);
}
else if (currentelement == "Статус") {
STATUS_CUSTOMER = new String(ch, start, length);
}
}
}

catch (Exception e) {
System.out.println("Исключение при получении значения узла: " + e);
return;
}
}

public void endElement(String name) {
try {


if (name == "Субъект") {
#sql {
insert into tmptable.xml_customer1(TMP_TYPE,TMP_CODE,NAME_CUSTOMER,COMMENT_CUSTOMER,NAME_DESC,INN,INDEX_CUSTOMER,ADDR,RESIDENT,BIK,GROUP_CODE,STATUS_CUSTOMER,PARAMETR)
values( : TMP_TYPE,: TMP_CODE, : NAME_CUSTOMER,: COMMENT_CUSTOMER,: NAME_DESC,: INN,: INDEX_CUSTOMER,: ADDR,: RESIDENT,: BIK,: GROUP_CODE,: STATUS_CUSTOMER,: PARAMETR)
};
TMP_TYPE="";
TMP_CODE="";
NAME_CUSTOMER="";
COMMENT_CUSTOMER="";
NAME_DESC="";
INN="";
INDEX_CUSTOMER="";
ADDR="";
RESIDENT="";
BIK="";
GROUP_CODE="";
STATUS_CUSTOMER="";
PARAMETR="";
#sql {commit};
}
}
catch (Exception e) {
System.out.println("Исключение в методе endElement: " + e);
return;
}
}

public void endDocument() {
System.out.println("Разбор документа окончен");
}
}
/
create or replace
procedure load_from_xml(fn in varchar2) as
language java
name 'load_xml.pStart(java.lang.String)';
/
2 ноя 07, 10:06    [4868626]     Ответить | Цитировать Сообщить модератору
 Re: XML с помощью SAX, помощь новичку  [new]
*Tank*
Member

Откуда: Москва
Сообщений: 10641
Ну и ещё одно: понимаю что в characters он входит 2ды почему то для однной записи, первы раз с значением а второй раз без значения и переетерает, но почему?
2 ноя 07, 10:12    [4868678]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить