表格格式

时间:2016-06-21 11:28:17

标签: xml postgresql

我有一个xml数据,我试图以正常的表格格式转换它:

<html>
  <head>
    <title>report</title>
    <model>
      <instance>
        <uploaded_form_dc8u7x id="reportform">
          <formhub>
            <uuid/>
          </formhub>
          <household_number/>
          <Survey_Name/>
          <photo/>
          <city/>
          <date/>
          <survey/>
          <start/>
          <end/>
          <meta>
            <instanceID/>
          </meta>
        </uploaded_form_dc8u7x>
      </instance>
      <bind constraint=" /uploaded_form_dc8u7x/household_number  &gt;= 2" nodeset="/uploaded_form_dc8u7x/household_number" required="true()" type="int"/>
      <bind nodeset="/uploaded_form_dc8u7x/Survey_Name" relevant=" /uploaded_form_dc8u7x/household_number  &gt; 02" required="true()" type="string"/>
      <bind nodeset="/uploaded_form_dc8u7x/photo" required="true()" type="binary"/>
      <bind nodeset="/uploaded_form_dc8u7x/city" required="true()" type="select"/>
      <bind nodeset="/uploaded_form_dc8u7x/date" required="true()" type="dateTime"/>
      <bind nodeset="/uploaded_form_dc8u7x/survey" required="true()" type="select1"/>
      <bind preload="timestamp" preloadParams="start" nodeset="/uploaded_form_dc8u7x/start" type="dateTime"/>
      <bind preload="timestamp" preloadParams="end" nodeset="/uploaded_form_dc8u7x/end" type="dateTime"/>
      <bind calculate="concat('uuid:', uuid())" nodeset="/uploaded_form_dc8u7x/meta/instanceID" readonly="true()" type="string"/>
      <bind calculate="'05ef936fe45e41d1bc08474399d64191'" nodeset="/uploaded_form_dc8u7x/formhub/uuid" type="string"/>
    </model>
  </head>
  <body>
    <input ref="/uploaded_form_dc8u7x/household_number">
      <label>Household Number</label>
    </input>
    <input ref="/uploaded_form_dc8u7x/Survey_Name">
      <label>Survey Name</label>
    </input>
    <upload mediatype="image/*" ref="/uploaded_form_dc8u7x/photo">
      <label>photo</label>
    </upload>
    <select ref="/uploaded_form_dc8u7x/city">
      <label>city</label>
      <item>
        <label>pune</label>
        <value>pune01</value>
      </item>
      <item>
        <label>mumbai</label>
        <value>mumbai02</value>
      </item>
      <item>
        <label>ahmednagar</label>
        <value>ahmednagar03</value>
      </item>
      <item>
        <label>delhi</label>
        <value>delhi04</value>
      </item>
    </select>
    <input ref="/uploaded_form_dc8u7x/date">
      <label>date</label>
    </input>
    <select1 ref="/uploaded_form_dc8u7x/survey">
      <label>survey</label>
      <item>
        <label>xyz</label>
        <value>xyz1</value>
      </item>
      <item>
        <label>abc</label>
        <value>abc1</value>
      </item>
    </select1>
  </body>
</html>

我试图以表格的形式获取数据:

  city         survey

  Pune           abc

  mumbai         xyz

  ahmednagar

  delhi

任何人都可以帮我解决这个问题吗?

实现这一目标的选择查询应该是什么?

我试图通过postgresSQL以表格格式选择数据。我想&#34; city&#34;和&#34;调查&#34;作为单独的列及其提到的数据。

我尝试了以下查询:

SELECT xpath('/html/body/input/label/text()', xml_content) as house_number from logger_xform;

它给我一行而不是单独的列:

&#34; {ABC,XYZ}&#34 ;;&#34; {普纳,孟买,阿迈德那格尔,德里}&#34;

1 个答案:

答案 0 :(得分:1)

试试这个:

            with table1 as (select $$<html>
              <head>
                <title>report</title>
                <model>
                  <instance>
                    <uploaded_form_dc8u7x id="reportform">
                      <formhub>
                        <uuid/>
                      </formhub>
                      <household_number/>
                      <Survey_Name/>
                      <photo/>
                      <city/>
                      <date/>
                      <survey/>
                      <start/>
                      <end/>
                      <meta>
                        <instanceID/>
                      </meta>
                    </uploaded_form_dc8u7x>
                  </instance>
                  <bind constraint=" /uploaded_form_dc8u7x/household_number  &gt;= 2" nodeset="/uploaded_form_dc8u7x/household_number" required="true()" type="int"/>
                  <bind nodeset="/uploaded_form_dc8u7x/Survey_Name" relevant=" /uploaded_form_dc8u7x/household_number  &gt; 02" required="true()" type="string"/>
                  <bind nodeset="/uploaded_form_dc8u7x/photo" required="true()" type="binary"/>
                  <bind nodeset="/uploaded_form_dc8u7x/city" required="true()" type="select"/>
                  <bind nodeset="/uploaded_form_dc8u7x/date" required="true()" type="dateTime"/>
                  <bind nodeset="/uploaded_form_dc8u7x/survey" required="true()" type="select1"/>
                  <bind preload="timestamp" preloadParams="start" nodeset="/uploaded_form_dc8u7x/start" type="dateTime"/>
                  <bind preload="timestamp" preloadParams="end" nodeset="/uploaded_form_dc8u7x/end" type="dateTime"/>
                  <bind calculate="concat('uuid:', uuid())" nodeset="/uploaded_form_dc8u7x/meta/instanceID" readonly="true()" type="string"/>
                  <bind calculate="'05ef936fe45e41d1bc08474399d64191'" nodeset="/uploaded_form_dc8u7x/formhub/uuid" type="string"/>
                </model>
              </head>
              <body>
                <input ref="/uploaded_form_dc8u7x/household_number">
                  <label>Household Number</label>
                </input>
                <input ref="/uploaded_form_dc8u7x/Survey_Name">
                  <label>Survey Name</label>
                </input>
                <upload mediatype="image/*" ref="/uploaded_form_dc8u7x/photo">
                  <label>photo</label>
                </upload>
                <select ref="/uploaded_form_dc8u7x/city">
                  <label>city</label>
                  <item>
                    <label>pune</label>
                    <value>pune01</value>
                  </item>
                  <item>
                    <label>mumbai</label>
                    <value>mumbai02</value>
                  </item>
                  <item>
                    <label>ahmednagar</label>
                    <value>ahmednagar03</value>
                  </item>
                  <item>
                    <label>delhi</label>
                    <value>delhi04</value>
                  </item>
                </select>
                <input ref="/uploaded_form_dc8u7x/date">
                  <label>date</label>
                </input>
                <select1 ref="/uploaded_form_dc8u7x/survey">
                  <label>survey</label>
                  <item>
                    <label>xyz</label>
                    <value>xyz1</value>
                  </item>
                  <item>
                    <label>abc</label>
                    <value>abc1</value>
                  </item>
                </select1>
              </body>
            </html>$$::xml xml_content) 

            select city,surveys[i] survey from (
            select generate_subscripts(citys,1) i,unnest(citys) city,surveys from (
                select xpath($$//*[@ref='/uploaded_form_dc8u7x/city']/item/label/text()$$,xml_content) citys,xpath($$//*[@ref='/uploaded_form_dc8u7x/survey']/item/label/text()$$,xml_content) surveys from table1
            ) a
            ) b