2 Replies Latest reply: Oct 11, 2012 10:09 PM by 967657 RSS

    SQL結果をXMLに出力する際のスタイルシートについて

    967657
      シェルスクリプトからSQLを実行して
      その結果をXMLで取り出すときの質問です。

      環境 
      Oracle10.1

      結果をXMLに出力することは問題なくできたのですが
      エンコードやスタイルシートの指定方法がわかりません。

      下記がSQL文です。

      -----------------------------
      DECLARE
      qryCtx DBMS_XMLGEN.ctxHandle;
      result CLOB;

      BEGIN
      qryCtx := dbms_xmlgen.newContext('select TEST1,to_char(DATETIME,''mm/dd hh24:mi'') ,TEST2,TEST3,TEST4
           from TEST_TABLE A );
      dbms_xmlgen.setRowTag(qryCtx,'ECONOMICDATA');
      dbms_xmlgen.setRowSetTag(qryCtx,'ECONOMICLIST');
      result := DBMS_XMLGEN.getXML(qryCtx);
      INSERT INTO temp_clob_tab VALUES(result);
      DBMS_XMLGEN.closeContext(qryCtx);
      END;
      /
      SELECT * FROM temp_clob_tab;
      exit;
      -----------------------------

      結果XMLです
      <?xml version="1.0"?>
      <ECONOMICLIST>
      <ECONOMICDATA>
      <TEST1>データ1</TEST1>
      <DATETIME>10/09 00:01</DATETIME>
      <TEST2>データ2</TEST2>
      <TEST3>データ3</TEST3>
      <TEST4>データ4</TEST4>
      </ECONOMICDATA>
      <ECONOMICLIST>

      下記のようにエンコードやスタイルシートの設定をするには
      どうすればよいでしょうか?
      <?xml version="1.0" encoding="UTF-8"?>
      <?xml-stylesheet type="text/xsl" href="economic.xsl"?>
      <ECONOMICLIST>
      <ECONOMICDATA>
      <TEST1>データ1</TEST1>
      <DATETIME>10/09 00:01</DATETIME>
      <TEST2>データ2</TEST2>
      <TEST3>データ3</TEST3>
      <TEST4>データ4</TEST4>
      </ECONOMICDATA>
      <ECONOMICLIST>

      ご教授お願いいたします。m(_ _)m
        • 1. Re: SQL結果をXMLに出力する際のスタイルシートについて
          tmtsmic
          こんにちは。

          CLOBもXMLも経験がなく、知識が疎いのですが
          ネットでざっと調べた感じだとencodingは
          「result := DBMS_XMLGEN.getXML(qryCtx);」
          の結果に対して強引にReplaceで文字列置換しているものが
          いくつか見られました。
          便利なパラメータは無いような雰囲気ですね。
          result := Replace(DBMS_XMLGEN.getXML(qryCtx),
                            '<?xml version="1.0"?>',
                            '<?xml version="1.0" encoding="UTF-8"?>');
          xml-stylesheet の方は分からないですねぇ。

          # encoding の次の行だから強引に
          # 改行コード と xml-stylesheet の行を含めた文字列置換をする、
          # とか考えたのですが、そういうことをしていいのかとか
          # 改行コードは何にしたらいいのかとか私の知識では分からなかったり・・・(すいません)
          • 2. Re: SQL結果をXMLに出力する際のスタイルシートについて
            967657
            ご回答ありがとうございます。

            文字列置換のやり方で、想定の出力ができました。
            result := Replace(DBMS_XMLGEN.getXML(qryCtx),
                              '<?xml version="1.0"?>',
                              '<?xml version="1.0" encoding="UTF-8"?>
            <?xml-stylesheet type="text/xsl" href="economic.xsl"?>');
            本当はパラメータ等で指定できれば一番よいんですが
            見つけられなかったので、教えていただいたやり方で対応したいと思います。

            #改行コードは特に指定せずそのまま改行しただけですが
            出力結果は改行されていたので問題ないかなと。