前のページ|次のページ

非エスケープ文字データを含むXMLドキュメントのインポート

W3C規格(section 4.6 Predefined Entities)では、文字データの場合、左山かっこ(<)、アンパサンド、アポストロフィー(')などの特定の文字は、&lt;&amp;&apos;のような文字参照または文字列を使用してエスケープする必要があると規定されています。たとえば、属性値に一重引用符や二重引用符を含める場合、一重引用符(')は&apos;として、二重引用符(")は&quot;として表されます。
非エスケープ文字を含んでいるXMLドキュメントをインポートするには、LIBNAMEステートメントでオプションXMLPROCESS=PERMITを指定して、W3C規格に従っていない文字データをXML Engineが受け付けるようにします。このようにすると、アポストロフィー、二重引用符、アンパサンドのような非エスケープ文字が文字データとして受け付けられます。
注: XMLPROCESS=PERMITを使用する場合には注意が必要です。XMLドキュメントが非エスケープ文字を含んでいる場合、そのドキュメントの内容は標準的なXML構成ではありません。このオプションは、利便性のために提供されているものであり、無効なXMLマークアップを奨励するものではありません。
次の例では、非エスケープ文字データを含んでいるPermit.XMLというXMLドキュメントをインポートしています。
<?xml version="1.0" ?>
<PERMIT>
   <CHARS>
      <accept>OK</accept>
      <status>proper escape sequence</status>
      <ampersand>&amp;</ampersand>
      <squote>&apos;</squote>
      <dquote>&quot;</dquote>
      <less>&lt;</less>
      <greater>&gt;</greater>
   </CHARS>
   <CHARS>
       <accept>OK</accept>
       <status>unescaped character in CDATA</status>
       <ampersand>Abbott & Costello</ampersand>
       <squote>Logan's Run</squote>
       <dquote>This is "realworld" stuff</dquote>
       <less> e < pi </less>
       <greater> pen > sword </greater>
  </CHARS>
   <CHARS>
      <accept>NO</accept>
      <status>single unescaped character</status>
      <ampersand>&</ampersand>
      <squote>'</squote>
      <dquote>"</dquote>
      <less></less>
      <greater></greater>
   </CHARS>
   <CHARS>
      <accept>NO</accept>
      <status>unescaped character in string</status>
      <ampersand>Dunn & Bradstreet</ampersand>
      <squote>Isn't this silly?</squote>
      <dquote>Quoth the raven, "Nevermore!"</dquote>
      <less></less>
      <greater></greater>
   </CHARS>
</PERMIT>
まず、デフォルトのXML Engineの動作を使用する例を示します。この場合、XML Engineは、XMLマークアップがW3C規格に従っていると仮定します。次のSASプログラムを実行すると、先頭の2つのオブザベーション(有効なXMLマークアップを含んでいるもの)だけがインポートされ、残りの2つのレコード(非エスケープ文字を含んでいるもの)に関してはエラーが生成されます。
libname permit xmlv2 'C:\My Documents\XML\permit.xml';

proc print data=permit.chars;
run;
SASログの出力
ERROR:There is an illegal character in the entity name. encountered during XMLInput parsing occurred at or near line 24, column 22 NOTE:There were 2 observations read from the data set PERMIT.CHARS.
LIBNAMEステートメントのオプションXMLPROCESS=PERMITを指定すると、XML EngineがこのXMLドキュメントをインポートできるようになります。
libname permit xmlv2 'C:\My Documents\XML\permit.xml' xmlprocess=permit;

proc print data=permit.chars;
run;
PERMIT.CHARSのPRINTプロシジャ出力
PERMIT.CHARSのPRINTプロシジャ出力
前のページ|次のページ|ページの先頭へ