- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perl での XML 処理での DTD 宣言につ)
PerlでのXML処理でのDTD宣言について
このQ&Aのポイント
- PerlのXML処理において、XML::LibXMLモジュールを使用しているが、DTD宣言部分を取得して書き出すことができない。
- DTD宣言部分を取得する方法についてお尋ねしたい。
- XML::LibXMLを使用している場合に、DTD宣言部分を書き出す方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
PODを見ながらやってみました。 こんな感じではないでしょうか。 #!/usr/bin/env perl use v5.16; use warnings; use utf8; use open IO => qw/:utf8 :std/; use autodie; use XML::LibXML; my $string = << 'EOF'; <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE aaa PUBLIC "-//bbb//CCCC//EN" "ddd.dtd" []> <doc> ....... </doc> EOF my $dom = XML::LibXML->load_xml(string => $string); my $dtd = $dom->internalSubset; say ref $dom; say ref $dtd; say $dtd->toString; 「XML::LibXML::Element」には、DTDを取り出すメソッドがないくさいので、もともとの「XML::LibXML::Document」オブジェクトから「XML::LibXML::Dtd」オブジェクトを引っこ抜いてくるのが楽な気がします。 結果は下記のようになりました。 XML::LibXML::Document XML::LibXML::Dtd <!DOCTYPE aaa PUBLIC "-//bbb//CCCC//EN" "ddd.dtd"> 僕もあまり詳しいわけではありませんので、ご参考になるかどうかわかりませんが……。
お礼
このやり方でうまくいきました。 困っていたのでとても助かりました、ありがとうございます!