解析oracle应用程序中的数据定义模板

时间:2015-01-04 10:09:46

标签: java xml oracle datatemplate

是否有任何标准的oracle解析器可以使用PLSQL或Java解析数据模板(.xml)文件。 例如,我想解析以下数据模板:

<?xml version="1.0" encoding="WINDOWS-1252" ?>    
<dataTemplate name="Employee Listing" description="List of Employees" v
 ersion="1.0">
<parameters>- Defines a single parameter for the Department Number 
            - with default of 20:
       <parameter name="p_DEPTNO" dataType="character" 
    defaultValue="20"/>
    </parameters>
<dataQuery>
   <sqlStatement name="Q1">
      <![CDATA[SELECT DEPTNO,DNAME,LOC from dept 
              order by deptno]]>
   </sqlStatement>
 <xml name="empxml" expressionPath=".//ROW[DEPTNO=$DEPTNO]"> - Defines name
  -  and link to DEPTNO in Q1
 <url method="GET" realm="" username="" password="">
file:///d:/dttest/employee.xml</url> - Defines url for xml data
</xml>  
</dataQuery>-
 <dataStructure>- The following section specifies the XML hierarchy 
                - for the returning data: 
     <group name="G_DEPT" source="Q1" 
      <element name="DEPT_NUMBER" value="DEPTNO"  />
     <element name="DEPT_NAME"   value="DNAME"/>
- This creates a summary total at the department level based 
- on the salaries at the employee level for each department:                 
     <element name="DEPTSAL" value="G_EMP.SALARY" 
      function="SUM()"/>
               <element name="LOCATION" value="LOC"  />
       <group name="G_EMP" source="empxml">
          <element name="EMPLOYEE_NUMBER" value="EMPNO" />
          <element name="NAME" value="ENAME"/>
          <element name="JOB" value="JOB" />
          <element name="MANAGER" value="MGR"/>
          <element name= "HIREDATE" value="HIREDATE"/>
          <element name="SALARY" value="SAL"/>
        </group>      
   </group>        
  </dataStructure>
</dataTemplate>

在上面的数据模板中,我想通过检查所有开始和结束标签来检查模板是否有效。 除此之外,我想从上面的模板中检索属性值。例如,元素标记包含属性“name”和“value”。我想要EMPLOYEE_NUMBER和EMPNO,NAME和ENAME等

我检查了dbms_xmldom和dbms_xmlparser但是它们用于解析简单的XML文件输出。

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

我认为你的问题与解析XML更相关,与oracle的关系更少。使用a data projection library(披露:我与该项目有关联),您的问题很快得到解决:

public class ParseTemplate {

    @XBDocURL("resource://data.xml")
    public interface Template {

        public interface Field {

            @XBRead("./@name")
            String getName();

            @XBRead("./@value")
            String getValue();
        }

        @XBRead("//group[@name='G_EMP']/element")
        List<Field> getFields();
    }

    @Test
    public void readAttributes() throws IOException {
        List<Field> fields = new XBProjector().io().fromURLAnnotation(Template.class).getFields();
        for (Field field : fields) {
            System.out.println(field.getName() + " " + field.getValue());
        }
    }
}

此JUnit测试打印出具有名称和值的每个字段:

EMPLOYEE_NUMBER EMPNO
NAME ENAME
JOB JOB
MANAGER MGR
HIREDATE HIREDATE
SALARY SAL