如何在PL / SQL中使用FOR LOOP从具有相同标签的xml clob中提取值

时间:2019-01-21 10:41:25

标签: xml plsql

在大多数情况下,我处理具有以下结构的简单xml CLOB:

<SuggestResponse>
  <suggestions>
    <value>ПАО "Cбербанк"</value>
    ....
    ....
  </suggestions>
</SuggestResponse>

我可以轻松提取值,然后将其与我拥有的任何变量进行比较:

IF variable = xmltype(xmlclob.extract('SuggestResponse/suggestions/value/text()').getstringval() THEN 
.....
END IF; 

但是有时候我会得到具有不同结构的XML CLOB:

<SuggestResponse>
  <suggestions>
    <value>ПАО "Cбербанк"</value>
    ....
    ....
  </suggestions>
  <suggestions>
    <value>ПАО Банк «ФК Открытие»</value>
    ....
    ....
  </suggestions>
</SuggestResponse>

有2个或更多标签,我不知道如何使用FOR LOOP来检查每个标签。如何指向当前正在使用<suggestions>的FOR LOOP(第一,第二...)。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您是我,我将避免使用不建议使用的提取(和extractvalue),而应使用XMLTABLE来查询xml文档的内容。这将比遍历同一文档以分别提取内容要快,因为这意味着xml文档仅需读取一次。

您可以这样做:

private bool isconnect;
public bool IsConnect
{
    get { return isconnect; }
    set { SetProperty(ref isconnect, value); }
}

Constructor()
{

    //Assign IsConnected when entering the Constructor
    IsConnect = CrossConnectivity.Current.IsConnected; //Don't know if you are using this plugin

    MessagingCenter.Subscribe<App, bool>(this, "Internet", (sender, arg) =>
        {
            if(IsConnect != arg)
            {
                IsConnect = arg;
                LoadSessions();
            }            
        });
    LoadSessions();
}