2016-05-24 13 views
0

私のXMLファイルには、今すぐマイ対応する終了タグがいずれかのノードで逃した オラクルPLSQLでXMLファイルを検証する方法

<?xml version = '1.0'?> 
<ROWSET> 
    <ROW> 
     <EMPNO>7369</EMPNO> 
     <ENAME>SMITH</ENAME> 
     <JOB>CLERK</JOB> 
     <MGR>7902</MGR> 
     <HIREDATE>12/17/1980 0:0:0</HIREDATE> 
     <SAL>800</SAL> 
     <DEPTNO>20</DEPTNO> 
    </ROW> 
    <ROW> 
     <EMPNO>7499</EMPNO> 
     <ENAME>ALLEN</ENAME> 
     <JOB>SALESMAN</JOB> 
     <MGR>7698</MGR> 
     <HIREDATE>2/20/1981 0:0:0</HIREDATE> 
     <SAL>1600</SAL> 
     <COMM>300</COMM> 
     <DEPTNO>30</DEPTNO> 
    </ROW> 
    <ROW> 
     <EMPNO>7521</EMPNO> 
     <ENAME>WARD</ENAME> 
     <JOB>SALESMAN</JOB> 
     <MGR>7698</MGR> 
     <HIREDATE>2/22/1981 0:0:0</HIREDATE> 
     <SAL>1250</SAL> 
     <COMM>500</COMM> 
     <DEPTNO>30</DEPTNO> 
    </ROW -- Now corresponding closing tag is missed in this line 
</ROWSET> 

は形式

の下に見えます。 PLSQLプログラミングでは、欠落しているタグをどのように識別できますか? XMLDBオプション私は使用することができますが、私はPLSQLでそれをしたいと思います。

答えて

2

有効なXMLであるかどうかを確認する必要がある場合は、単にエラーを処理して変換することができます。例えば:

良いのxml:

SQL> select xmltype(q'[<?xml version = '1.0'?> 
    2     <ROWSET> 
    3      <ROW> 
    4      <EMPNO>7369</EMPNO> 
    5      </ROW> 
    6     </ROWSET>]') 
    7 from dual; 

XMLTYPE(Q'[<?XMLVERSION='1.0'?><ROWSET><ROW><EMPNO>7369</EMPNO></ROW></ROWSET>]' 
-------------------------------------------------------------------------------- 
<?xml version="1.0"?> 
<ROWSET> 
    <ROW> 
    <EMPNO>7369</EMPNO> 
    </ROW> 
</ROWSET 

悪いのxml:

SQL> select xmltype(q'[<?xml version = '1.0'?> 
    2     <ROWSET> 
    3      <ROW> 
    4      <EMPNO>7369</EMPNO> 
    5      </ROW 
    6     </ROWSET>]') 
    7 from dual; 
ERROR: 
ORA-31011: XML parsing failed 
ORA-19202: Error occurred in XML processing 
LPX-00231: invalid character 60 ('<') found in a Name or Nmtoken 
Error at line 6 
ORA-06512: at "SYS.XMLTYPE", line 310 
ORA-06512: at line 1 
+0

はあなたにAleksej.It作品をありがとうございました – Root

関連する問題