喫茶XRAYトップページ


[7142] Open XML の使い方?返信 削除
2014/1/13 (月) 23:53:51 Mr.XRAY
TCheckListBox のことを書いたのでついでに.

[Open XMLでファイルを読み込みたいのですが]
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+201401/14010010.txt

igy さんのレスに対して,次のような反応があります.

>>Doc := XmlToDomParser1.ParseFile('test.xml', False);
>>にしたら、どうなりますか?
>EParserExceptionの'Signal Processing Exception'が出ます。


具体的にどのような手順か分からないので何とも言えませんが,
もしかしたら,

[Delphi XE Starter EditionでXMLをパースする - Open XML]
http://blogs.embarcadero.com/teamj/2011/06/06/2080/

にある,
≪5. フォームに、....、Open XMLのTXmlToDomParser コンポーネント
およびTDomImplementationコンポーネントを貼り付けて、
TXmlToDomParserのDOMImplプロパティにTDomImplementationを結び付けます。≫

かも知れませんね.
igy さんは優しいですが,私は何か一言,二言言わないと気が済まないし,
何か言えば,また批判されてしまうかも知れないし,
批判されてまでレスするつもりはないので,レスはしませんが.

後,参考になるとしたら,最初の質問で,

>Doc := XmlToDomParser1.fileToDom('test.xml');//未定義の識別子:fileToDom

とありますが,この XmlToDomParser1 のコンポーネントの定義のところを
[Ctrl] + [マウスクリック]
でソースコードのそのコンポーネントのクラスのところが見られます.
そうすれば,fileToDom というメソッドがないことが分かります.

Personal 版や Starter 版は,ソースコードがないので,ソースコードを見る
という習慣がないかも知れませんが,ソースコードの存在は強力です.
必要に応じて確認すると便利です.


[7152] Re:Open XML の使い方?返信 削除
2014/1/15 (水) 13:39:29 Mr.XRAY
やってみました.私は Pro 版なので必要ないのですが,
環境は,Windows 7 U64(SP1) + Delphi XE5 Pro(UP2) です.

操作手順は次の通りです.

(1) http://www.philo.de/xml/downloads.shtml から
    以下のファイルをダウンロードして解凍
    Utility Library v.3.0.3 (released 2012-01-21)
    Alternative Document Object Model v.5.1.6 (released 2012-03-27)
 
(2) インストールは次の記事を参考にしました.
    Utilities_DXE2.dpk をビルドし,dpkAdom_5_1DelphiXE2.dpk をイントールしました.

    [Delphi XE Starter EditionでXMLをパースする - Open XML]
    http://blogs.embarcadero.com/teamj/2011/06/06/2080/
 
ですが,ビルドまたはインストールの際に次のエラーが発生したので修正

(3) unit dkAdomReg; で未定義のエラーが発生したので以下のように修正
    {$ELSE} DesignIntf, {$ENDIF}
(4) ポインタ型が必要ですのエラーが何か所かあったので修正

(5) 「新規プロジェクト」(新規です,新規です) を作成し,
    図のようにコンポーネントを配置
    XmlToDomParser1 の DOMImpl プロパティ を DomImplementation1 にした
 
(6) テストコードを以下のようにしました

procedure TForm1.Button1Click(Sender: TObject);
var
  FilePath : String;
  Dom      : TdomDocument;
  tweets   : TDomNodeList;
  i        : Integer;
begin
  FilePath := ExtractFilePath(Application.ExeName) + 'ZipAddress.xml';
  Dom := XmlToDomParser1.ParseFile(FilePath, True);

  tweets := dom.GetElementsByTagName('address');
  for i := 0 to tweets.Length -1  do begin
    Memo1.Lines.Add(tweets.Item(i).GetFirstChildElement('prefecture').FirstChild.NodeValue);
    Memo1.Lines.Add('--------------');
  end;
end;

コード中の ZipAddress.xml は,
[921_WebAPI_REST による郵便番号と住所検索] で作成した XML ファイルです.
上の図が設計時のもの,下の図が実行結果です.
なお,このン件についての質問は一切受け付ける予定はありません.
特に,何万行のプログラムの中でテストしてトラブルになっている方からは
受け付けません(笑)


INCM/CMT
Cyclamen v3.82