1

単純なxmlを使用して処理しようとしているxmlドキュメント(msword 2010から生成)があります。

xmlのサンプル:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 wp14">
<w:body>
    <w:p w:rsidR="005B1098" w:rsidRDefault="005B1098"/>
    <w:p w:rsidR="00F254A4" w:rsidRDefault="00F254A4"/>
    <w:p w:rsidR="00F254A4" w:rsidRPr="008475A1" w:rsidRDefault="00C15492" w:rsidP="008475A1">
        <w:pPr>
            <w:jc w:val="center"/>
            <w:rPr>
                <w:b/>
                <w:sz w:val="44"/>
                <w:szCs w:val="44"/>
            </w:rPr>
        </w:pPr>
        <w:r w:rsidRPr="008475A1">
            <w:rPr>
                <w:b/>
                <w:sz w:val="44"/>
                <w:szCs w:val="44"/>
            </w:rPr>
            <w:t>Test file</w:t>
        </w:r>
    </w:p>
    <w:p w:rsidR="00C15492" w:rsidRPr="008475A1" w:rsidRDefault="00C15492" w:rsidP="008475A1">
        <w:pPr>
            <w:jc w:val="center"/>
            <w:rPr>
                <w:sz w:val="20"/>
                <w:szCs w:val="20"/>
            </w:rPr>
        </w:pPr>
        <w:r w:rsidRPr="008475A1">
            <w:rPr>
                <w:sz w:val="20"/>
                <w:szCs w:val="20"/>
            </w:rPr>
            <w:t>another paragraph</w:t>
        </w:r>
    </w:p>
</w:body>
</w:document>

私はそれを使用して開こうとしています:

$content = '/reports/docx_templates/testing2.xml';
if(!$simple_xml = simplexml_load_file($content)){
    trigger_error('Error reading XML file',E_USER_ERROR);
} else {
    echo 'loaded';
}

そして、エラーが発生します:

Message: simplexml_load_file(): I/O warning : failed to load external entity " Test file another paragraph "

何か案は?

4

2 に答える 2

1

SimpleXMLElementクラスが好きです。

$xml = new SimpleXMLElement(file_get_contents($content));

私はあなたのXMLファイルとその動作でそれをテストしました。

編集:

これは、WordXMLファイルを解析するための短いチュートリアルです。WordXML

于 2012-04-13T12:00:23.710 に答える
1

PHPのXMLパーサーで何かが起こっているのは正しくないと思います。

http://schemas.openxmlformats.orgは有効なWebアドレスに移動しませんが、XML名前空間ルールがそれを要求しないため、移動する必要はありません。ただし、このページを見てください

https://bugs.php.net/bug.php?id=60416

そして、誰かが名前空間のクラッジであなたの問題を回避することに成功したことがわかります。

元の質問が示しているのは、コードの実行が成功している可能性があると思われますが、trigger_errorを使用して強制したエラーメッセージが表示されます。

これはコメントするには長すぎます。

そして、それは実際には答えではないので、これを補うための提案があります...

phpファイルと同じディレクトリにxmlをtesting2.xmlとして保存した後、このコードを実行します。

<?php

if (file_exists('testing2.xml')) {
    $content = file_get_contents('testing2.xml');
    $xml = new SimpleXMLElement($content );
    echo "<pre>";        
    var_dump($xml );
    echo "</pre>"; 
} else {
    exit('Failed to open testing2.xml.');
}
于 2012-04-13T13:22:05.590 に答える