2016-03-28 11 views
0

一部のおかげで、ハイフン(< some-tag >)でXMLタグにアクセスする方法がわかりました。私が見たすべての例は、このようなことをしています。 (私は多分、私は覚えていません間違いをそれを考え出した方法)ハイフンが期待どおりに動作しないXMLタグの解析

$content = $xml->{'document-content'}; 

は、しかし、私にとって、それは動作しません、これは引用符なしで

$content = $xml->{document-content}; 

を行います。私は引用符を使用している場合、私はこのエラーを取得する

お知らせ:26

だから、1はちょうど思うだろう行に/html/my/dir/myfile.phpで非オブジェクトのプロパティを取得しようとすると、引用符なしでそれを使用してください。確かに私はXMLを解析している理由に着くまでです。 XMLはODTファイルからのもので、最終的にPDFを生成するためのテンプレートとして使用されます。何かを開発している間、私は常に "E_ALL"エラー報告を使用します。それを設定すると、引用符を付けずにこの2つのエラーが発生します。

お知らせ:未定義の定数文書の使用 - ライン上/html/my/dir/myfile.phpで「文書」を想定し24

お知らせ:未定義の定数コンテンツの使用 - で「コンテンツ」と想定/ html/my/dir/myfile.php on line 24

しかし、それはドキュメントの残りの部分をうまく解析します。問題は、PDFを作成する必要があり、PDF Generatorを実行する前に「通知」エラーが出力された場合、「ヘッダー」が正しく設定されず、PDFが作成されないということです。今ではエラー報告を無効にすることを提案するかもしれませんが、PDFが機能していない場合、私はそれらのエラーを見ることができません。

実際、私は引用符を付けずにすべての理由でそれが損なわれています。私がPHP構文について知っていることは、引用符をつけないと、それが以前にどこかで定義されなければならない定数(エラーが指摘する通り)であるということです。このように、パーサーはその時点で失敗するはずですが、そうではありません。実際には、パーサーが正しく動作します。

ほとんどの場合、エラー報告を無効にすることなく、これらの2つの通知エラーを取り除く方法を知る必要があります。そして、私は非常に興味があります。なぜそれが引用符なしで動作するのか、どのように動作しているのかは、プログラミングのすべての規範から大幅に逸脱しているようです。

は、念のためにそのここで必要なの「$コンテンツ」

$zip = new ZipArchive; 

if ($zip->open('../docs/myfile.odt') === true) 
{ 
    $xmlstring = $zip->getFromName('content.xml'); 
    $zip->close(); 
} 

// remove all namespaces and swaps out tab and space tags 
$replace = array('office:', 'style:', 'draw:', 'fo:', 'text:', 'svg:', '<tab/>', '<s/>'); 
$value = array('', '', '', '', '', '', "\t", '&#160;'); 
$xmlstring = str_replace($replace, $value, $xmlstring); 

$xmlstring = preg_replace_callback('/<s c="(.+?)"\/>/s', 'ReplaceSpaces', $xmlstring); 

$xml = simplexml_load_string($xmlstring); 
$content = $xml->{document-content}; 
+0

XML構文解析と一般的なPHP構文、文字列操作、さらにいくつかの問題が混在しています。あなたは "単にエラーメッセージを取り除く必要はありません"。 'document-content'は文字列' document'から文字列 'content'を引きます。結果は' 0'です。ゼロは有効なタグ名ではなく、XMLに存在することはできません。 – ThW

+0

だから、基本的にそれはXMLオブジェクト "0"を得ていますか?だから、私は '$ xml - > {0}'をコード内で試してみた。**は**エラーメッセージも出さなかった。あなたは間接的に問題を解決しました。しかし、私はまだ、XML解析がなぜ機能しているのかについての説明に非常に興味があります。あなたの最後の文章は、私のコードがうまくいかないことを暗示しているようです。私はそうしてはいけないと私は同意するでしょう、なぜそれは機能しますか? – Krik

+0

これは動作していません。最初のエラーメッセージは$ contentがオブジェクトではないことを示しています。ソースのさまざまな部分をカプセル化して分離し、それをデバッグします。 – ThW

答えて

0

に至るまでのすべてのコードで私は自分自身を蹴る必要があり、私は、XMLファイルの多くを解析されてきたし、RSSフィード、長年にわたって、および答えは非常に簡単です。あなたはではありませんは、SimpleXMLを使用する際にXMLの主要な要素を参照する必要があります。

<document-content> 
    <tag1> 
    </tag1> 
    <tag2> 
     <anothertag> 
     </anothertag> 
    </tag2> 
</document-content> 

だから$xml->{document-content}->tag2(または$xml->{0}->tag2が)私はこれがODTファイルのと私の最初のゴーラウンドであること、およびその口論のいくつかに対処することと推測してい$xml->tag2

と全く同じである、私が見落とし明らかです。

関連する問題