2017-05-23 28 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),''));