是否有任何标准的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文件输出。
有人可以帮我这个吗?
答案 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