1

Symfony2 DomCrawler を使用して XML から情報を取得しようとしています。トレーニングのために、次の XML 構造を使用しています: http://www.w3schools.com/xpath/xpath_examples.asp

各本のタイトルを $crawler に書き込みたい

これは私のコードです:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\DomCrawler\Crawler;

class ImportController extends Controller
{
    public function indexAction($publisher)
    {
        $books = array();
        $bookstore = <<<'XML'
            <bookstore>

                <book category="COOKING">
                    <title lang="en">Everyday Italian</title>
                    <author>Giada De Laurentiis</author>
                    <year>2005</year>
                    <price>30.00</price>
                </book>

                <book category="CHILDREN">
                    <title lang="en">Harry Potter</title>
                    <author>J K. Rowling</author>
                    <year>2005</year>
                    <price>29.99</price>
                </book>

                <book category="WEB">
                    <title lang="en">XQuery Kick Start</title>
                    <author>James McGovern</author>
                    <author>Per Bothner</author>
                    <author>Kurt Cagle</author>
                    <author>James Linn</author>
                    <author>Vaidyanathan Nagarajan</author>
                    <year>2003</year>
                    <price>49.99</price>
                </book>

                <book category="WEB">
                    <title lang="en">Learning XML</title>
                    <author>Erik T. Ray</author>
                    <year>2003</year>
                    <price>39.95</price>
                </book>

            </bookstore>
            XML;
        //Crawl now
        $crawler = new Crawler($bookstore);            
        $crawler->filterXPath('/bookstore/book/title')->text();
        return $this->render('souncImportBundle:Import:index.html.twig', array('publisher' => $publisher, 'books' => $books, 'msg' => $bookstore, 'crawler' => $crawler));
    }
}

これにより、次の例外が返されます。

現在のノード リストは空です。500 内部サーバー エラー - InvalidArgumentException

なぜそれがうまくいかないのですか?

4

2 に答える 2

0

問題は HEREDOC 表記にあります。XMLドキュメントの左側の壁に2 番目を完全に近づける必要があります。それを含む行のターミネータの前に空白を入れることはできません。それは奇妙に聞こえ、インデントを台無しにすることはわかっていますが、PHP では長い間既知の問題でした。したがって、コードは次のようになります。

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\DomCrawler\Crawler;

class ImportController extends Controller
{
    public function indexAction($publisher)
    {
        $books = array();
        $bookstore = <<<'XML'
            <bookstore>

                <book category="COOKING">
                    <title lang="en">Everyday Italian</title>
                    <author>Giada De Laurentiis</author>
                    <year>2005</year>
                    <price>30.00</price>
                </book>

                <book category="CHILDREN">
                    <title lang="en">Harry Potter</title>
                    <author>J K. Rowling</author>
                    <year>2005</year>
                    <price>29.99</price>
                </book>

                <book category="WEB">
                    <title lang="en">XQuery Kick Start</title>
                    <author>James McGovern</author>
                    <author>Per Bothner</author>
                    <author>Kurt Cagle</author>
                    <author>James Linn</author>
                    <author>Vaidyanathan Nagarajan</author>
                    <year>2003</year>
                    <price>49.99</price>
                </book>

                <book category="WEB">
                    <title lang="en">Learning XML</title>
                    <author>Erik T. Ray</author>
                    <year>2003</year>
                    <price>39.95</price>
                </book>

            </bookstore>
XML;
        //Crawl now
        $crawler = new Crawler($bookstore);            
        $crawler->filterXPath('/bookstore/book/title')->text();
        return $this->render('souncImportBundle:Import:index.html.twig', array('publisher' => $publisher, 'books' => $books, 'msg' => $bookstore, 'crawler' => $crawler));
    }
}
于 2016-03-11T21:29:24.610 に答える