0

私がやろうとしているのは、次のようなxmlを生成するストアドプロシージャを作成することです。

    <?xml version="1.0" encoding="utf-8"?>
    <rss xmlns:georss="http://www.georss.org/georss" version="2.0">
    <rowset>
    <row>
      <title>myTitle</title>
      <description>myDescription</description>
      <georss:point>myLat myLon</georss:point>
     </row>
     ...
    </rowset>
    </rss>

生成するものは次のとおりです

 SELECT DBMS_XMLGEN.getXML(q'!
 SELECT trim(sitedesc)  AS "title", 
    '<a href="../scripts/fmiinfo.asp?file_code=_BLDGLIST&sitecode='||trim(sitecode)||'&forceDB=">'||trim(siteabbrev)||'</a>'   AS "description", 
    trim(latitude)|| ' ' ||trim(longitude) AS "georss:point"
   FROM LS
   WHERE sold <> 1
    !') FROM dual;

出力は次のようになります

   <ROW>
   <title>Tipton Facilities</title>
   <description>&lt;a href=&quot;../scripts/fmiinfo.asp?file_code=_BLDGLISTnull=USINTI01null=&quot;&gt;TIP1&lt;/a&gt;</description>
   <georss:point>40.286008 -86.058054</georss:point>
   </ROW>

> < & %別のページへのリンクが必要な「説明」では、出力が予約文字をエンティティ参照に自動的に変換するように見えるように、xmlに特定の予約文字があることを理解しています。

ただし、問題は、プログラムが変数であると見なしsitecodeforcedbそうでない場合はURLに変数が含まれ、結果から削除されることです。

URLは次のようになります。&lt;a href="../scripts/fmiinfo.asp?file_code=_BLDGLIST&amp;sitecode=USINTI01&amp;forceDB="&gt;

しかし、それは&lt;a href=&quot;../scripts/fmiinfo.asp?file_code=_BLDGLISTnull=USINTI01null=&quot;&gt;

ctr()目的の出力を取得するには、関数付きのURLを入力する必要がありますか?

SET SCAN OFF私の変数の質問を修正します。
以下のコメントに従ってサンプルコードを更新します。

             SELECT XMLELEMENT("rss", XMLATTRIBUTES('http://www.georss.org/georss' AS "xmlns:georss"),
                XMLELEMENT("channel",
                             XMLAGG(XMLELEMENT("item",
                                               XMLFOREST(title AS "title",
                                                          description AS "description",
                                                          point AS "georss:point"))))).EXTRACT('/*')
             FROM (SELECT trim(longitude) || ' ' || trim(latitude) AS point, 
      '../scripts/fmiinfo.asp?file_code=_BLDGLIST&sitecode='||trim(sitecode)||'&forceDB=">'||trim(siteabbrev)||'</a>' AS description, 
      trim(sitedesc) AS title
      FROM ls 
      WHERE sold <>1
    );
4

1 に答える 1

0

これはsqlplusから実行しました。sqlplusは、デフォルトでアンパサンドを置換文字と見なします。これを無効にするには、sqlplusの「setscanoff」で実行します。GUIには、置換変数のチェックを停止するための同等の設定があります。

XMLX関数(XMLForest、XMLElement)を使用した場合、rssははるかに簡単できれいになります。

例えば

SQL> select xmlelement("rss", xmlattributes('http://www.georss.org/georss' as "xmlns:georss"),
  2                     xmlelement("rowset",
  3                                 xmlagg(xmlelement("row",
  4                                                    xmlforest(title as "title",
  5                                                               description as "description",
  6                                                               point as "georss:point"))))).extract('/*')
  7    from (select 'myLat myLon' point, 'asd' description, 'foo' title
  8             from dual
  9           union all
 10           select 'myLat2 myLon2' point,
 11                 '<a href="../scripts/fmiinfo.asp?file_code=_BLDGLIST&sitecode=USINTI01&forceDB=">' description,
 12                 'tetert' title
 13             from dual);

XMLELEMENT(RSS,XMLATTRIBUTES
------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------
<rss xmlns:georss="http://www.georss.org/georss">
  <rowset>
    <row>
      <title>foo</title>
      <description>asd</description>
      <georss:point>myLat myLon</georss:point>
    </row>
    <row>
      <title>tetert</title>
      <description>&lt;a href=&quot;../scripts/fmiinfo.asp?file_code=_BLDGLIST&amp;sitecode=USINTI01&amp;forceDB=&quot;&gt;</description>
      <georss:point>myLat2 myLon2</georss:point>
    </row>
  </rowset>
</rss>


SQL>
于 2012-11-07T17:30:36.053 に答える