1

Word 2007 ドキュメント (docx) を開こうとしています。連続して解凍しましたが、コードの xPath 部分に問題があります。各要素を反復処理して、要素内のテキストを取得したいと考えています。

以下の現在の例では、最初の要素のテキストを xPath システムに慣れさせようとしています。

ドキュメント.xml

<w:document>
    <w:body>
        <w:p>
            <w:r>
                <w:t>Testing</w:t>
            </w:r>
        </w:p>
    </w:body>
</w:document>

PHP

$dom = new DOMDocument();
$dom->loadXML($string);
$xpath = new DomXPath($dom);
$textNodes = $xpath->query("/w:document/w:body/w:p[1]/w:r[1]/w:t[1]");
var_dump($textNodes->item(1)->textContent);
4

2 に答える 2

0

無効な xpath クエリは常にエラーになるため、修正する必要がある無効な xpath クエリがあります。その結果を使用してノードを取得することはできません。

残念ながら、XML が無効であるため、xpath クエリは無効です。そのため、最初に XML を修正しない限り、xpath クエリを使用する (またはさらにテストする/書き続ける) ことはできません。

質問で提供した XML から、 w-prefix の名前空間宣言が明らかに欠落しています。

E_ALL最高レベル ( ) へのエラー レポート、開発環境でのエラーの表示、および一般的なエラー ログを有効にする必要があります。その後、エラー ログをたどることができます。

Warning: DOMDocument::loadXML(): Namespace prefix w on document is not defined in Entity, line: 1 in /tmp/execpad-1d8a88cab4fd/source-1d8a88cab4fd on line 15

Warning: DOMDocument::loadXML(): Namespace prefix w on body is not defined in Entity, line: 2 in /tmp/execpad-1d8a88cab4fd/source-1d8a88cab4fd on line 15

Warning: DOMDocument::loadXML(): Namespace prefix w on p is not defined in Entity, line: 3 in /tmp/execpad-1d8a88cab4fd/source-1d8a88cab4fd on line 15

Warning: DOMDocument::loadXML(): Namespace prefix w on r is not defined in Entity, line: 4 in /tmp/execpad-1d8a88cab4fd/source-1d8a88cab4fd on line 15

Warning: DOMDocument::loadXML(): Namespace prefix w on t is not defined in Entity, line: 5 in /tmp/execpad-1d8a88cab4fd/source-1d8a88cab4fd on line 15

Warning: DOMXPath::query(): Undefined namespace prefix in /tmp/execpad-1d8a88cab4fd/source-1d8a88cab4fd on line 17

Warning: DOMXPath::query(): Invalid expression in /tmp/execpad-1d8a88cab4fd/source-1d8a88cab4fd on line 17

Fatal error: Call to a member function item() on a non-object in /tmp/execpad-1d8a88cab4fd/source-1d8a88cab4fd on line 18

これらが示すように、XML には多くの問題があり、最終的には xpath クエリが無効になり、最終的にスクリプト全体が停止します。

于 2013-05-03T17:05:18.953 に答える