2017-05-23 75 views
0

這裏是一個xml:獲取節點內的單個節點值PLSQL

<root> 
    <error> 
    <description> 
     <code>I899</code> 
    </description> 
    <solution> 
     <code>AZE4</code> 
    </solution> 
    </error> 
    <error> 
    <description> 
     <code>I900</code> 
    </description> 
    </error> 
</root> 

這裏是代碼:

myParser := DBMS_XMLPARSER.newParser; 
ficContent := DBMS_XSLPROCESSOR.Read2Clob(directoryPasrau, crmNomfilename , '0'); 
DBMS_XMLPARSER.parseBuffer(myParser,ficContent); 
dom := DBMS_XMLPARSER.getDocument(myParser); 
rootElement := DBMS_XMLDOM.getDocumentElement(dom); 

nlErrors := DBMS_XSLPROCESSOR.selectNodes(DBMS_XMLDOM.makeNode(dom), '//' || rootName || '/error', 'xmlns:ns2="http://www.gip-mds.fr/"'); 

到這裏它是好的,我得到了2錯誤節點

FOR i IN 0 .. DBMS_XMLDOM.getLength(nlErrors) - 1 LOOP 
    tabBisInfosList.EXTEND; 
    tabBisInfosList(i+1).descriptionCode := TRIM(TRANSLATE(TRANSLATE(DBMS_XMLDOM.getNodeValue(DBMS_XSLPROCESSOR.selectSingleNode(DBMS_XMLDOM.Item(nlAnomalies, i), 'description/code')), chr(10), ' '), chr(9), ' ')); 
END LOOP; 

tabBisInfosList(i + 1).descriptionCode中沒有任何內容。

相同的,如果我使用這些模式: 「/說明書/代碼」或「//描述/代碼」

你知道爲什麼嗎?

回答

0

兩個錯誤的位置:

  1. XPath表達式應該是這個: './description/code'
  2. 它不是:

TRIM(翻譯(TRANSLATE(DBMS_XMLDOM.getNodeValue(DBMS_XSLPROCESSOR.selectSingleNode(DBMS_XMLDOM.Item(nlAnomalies,i),'description/code')),chr(10),''),chr(9),''));

但是

TRIM(翻譯(翻譯(DBMS_XMLDOM.getNodeValue(DBMS_XMLDOM.getFirstChild(DBMS_XSLPROCESSOR.selectSingleNode(DBMS_XMLDOM.Item(nlAnomalies,i)中, '描述/代碼'))),CHR(10), ''),chr(9),''));