在PLSQL中获取节点内的单节点值

时间:2017-05-23 13:22:56

标签: xml oracle plsql

这是一个xml:

<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。

中没有任何内容

如果我使用这些模式,则相同:  &#39; /说明/代码&#39;或&#39; //说明/代码&#39;

你知道为什么吗?

1 个答案:

答案 0 :(得分:0)

这里有两个错误:

  1. xpath表达式应该是这样的:&#39; ./ description / code&#39;
  2. 不是:
  3. TRIM(TRANSLATE(DBL_XMLDOM.getNodeValue(DBMS_XSLPROCESSOR.selectSingleNode(DBMS_XMLDOM.Item(nlAnomalies,i),&#39; description / code&#39;)),chr(10),&#39;&# 39;),chr(9),&#39;&#39;));

    但是

    TRIM(TRANSLATE(DBL_XMLDOM.getNodeValue(DBMS_XMLDOM.getFirstChild(DBMS_XSLPROCESSOR.selectSingleNode(DBMS_XMLDOM.Item(nlAnomalies,i),&#39; description / code&#39;))),chr(10),& #39;&#39;),chr(9),&#39;&#39;));