php和xml解析错误:解析错误,意外T_OBJECT_OPERATOR

时间:2013-04-23 21:41:55

标签: jquery xml ajax php

我一直在研究一个涉及从XML文件中读取的PHP页面。但是,我看到此错误消息:解析错误:解析错误,第24行意外的T_OBJECT_OPERATOR。但我不确定导致错误的原因。所以我想知道是否有人能弄清楚我做错了什么。

<?php
if (!isset($_GET["searchstr"]))
    print "no Search String is provided! <br />";
else if (!isset($_GET["searchtype"]) || empty($_GET["searchtype"]))
    print "No Search type is selected!<br />";


    else 
{
    $searchstr = $_GET["searchstr"];
    $searchtype = $_GET["searchtype"];

    $xmlDoc = new DOMDocument();
    @ $success = $xmlDoc->load("books.xml");
    if (!$success)
        print "No XML book data on the server!";


else
{
    $books = $xmlDoc->getElementsByTagName("book");
    $num = 0;
    foreach ($books as $book)

        $title = $book->getElementsByTagName("title")->item(0)->firstChild->nodevalue;          
        $isbn13 = $book->getElementsByTagName("ISBN13")->item(0)->firstchild->nodevalue;
        $isbn10t = $book->getElementsByTagName("ISBN10");
        $isbn10 = "";
    if ($isbn10t->length > 0)
        $isbn10 = $isbn10t->item(0)->firstchild->nodevalue;

        $authors = $book->getElementsByTagName("author");
        $author = "";
        for ($j=0; $j<$authors->length; $j++)
        {

if ($j>0)
            {
                if ($j < $authors->length-1) $author .= ". ";
                else $author .= " and ";
            }
            $author .= $author->item($j)->getElementsByTagName("firstname")->item(0)->firstchild->nodevalue;
            $author .= " " . $authors->item($j)->getElementsByTagName("lastname")-item(0)->firstchild->nodevalue;
        }
        $desc = $book->getElementsByTagName("descritpion");
        $description = "";
        if ($desc->length > 0)
            $descreption = $desc->item(0)->firstchild->nodevalue;

        if (empty($searchstr)
        || searchtype == "title" && eregi($searchstr,$title)
        || $searchtype == "isbn" && (eregi($searchstr, $author)
        || $searchtype == "keyword" && (eregi($searchstr, $title) || eregi($searchstr, $description)

{
            $num++
            print "{$num}. Title: <a href=\"select.php?isbn={$isb13}\">{$title}</a><br />";
            print "Author: {$author}<br />"
            print "ISBN-13. ";
            print $books->getElementsByTagName("ISBN13")->item(0)->firstchild->nodevalue."<br />";
            $isbn10 = $book->getElementsByTagName("ISBN10");
            if ($isbn10->length > 0)
            {
                print " ISBN-10: " . $isbn10->item(0)->firstchild-nodevalue. "<br />";
            }
            print "Price: $";
            print $book->getElementsByTagName("price")->item(0)->firstchild->nodevalue. "<br />";
            print "<br />"
        }
        if ($num == 0)
            print "no book is found!";  
    }


}
}

?>

以下是我正在使用的XML代码的示例

<book id="1"> 
    <title>Beginning ASP.NET 4 in C# 2010</title> 
    <authors> 
      <author> 
        <lastname>MacDonald</lastname> 
        <firstname>Matthew</firstname> 
      </author> 
    </authors> 
    <ISBNs> 
      <ISBN13>9781430226086</ISBN13> 
      <ISBN10>1430226080</ISBN10> 
    </ISBNs> 
    <publisher>Apress</publisher> 
    <publishdate>2010-05</publishdate> 
    <pages>981</pages> 
    <price>49.99</price> 
    <description>This book discusses ASP.NET programming in C# with Visual Studio 2010.</description> 
  </book>

以下是“搜索”页面中的代码,即PHP页面之前的页面;

 <!DOCTYPE html>
<html>
<head>
    <title>Textbook Buyer</title>
    <link href="styles.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">

    function doSearch()
    {
        var searchstr = document.getElementById("searchstr").value;
        var searchtype = document.getElementById("searchtype").value;

        $.ajax
        ({
            type: "GET",
            url: "searchlist.php?searchstr=" + searchstr + "&searchtype=" + searchtype,
            success: function(sText, sStatus, oXHR) 
            {
                $("div#results").html(sText);
            },
            error: function (oXHR, sStatus, sError) 
            {
                $("div#results").html("An error occurred.");
            }
        });
    }   

    </script>
</head>
<body>
    <table>
     <tr>
       <td class="header" colspan="5">Textbook Buyer</td>
     </tr>
     <tr>
       <td id="td1" colspan="5">
       | <a href="welcome.php">Welcome</a> 
       | <a href="bestsellers.php">Bestsellers</a>
       | <a href="hotdeals.php">Hot Deals</a>
       | <a href="bookstores.php">Bookstores</a>
       | <a href="myaccout.php">My Account</a>
       | <a href="help.php">Help</a>
       |</td>
     </tr>
     <tr>
       <td class="column">
        <strong>Browse Textbooks<br />
        by Category:</strong><br />
        <br />
        Business -<br />
        Computer Science -<br />
        History -<br />
        Mathematics -<br />
        Medical -<br />
        Social Science  -<br />
       </td>
       <td class="td2"></td>
       <td id="td3">
        <div id="searchBox"> <br />
          <input type="text" id="searchstr" size="30" />
          <select id="searchtype">
            <option value="title" selected="selected">Title</option>
            <option value="author">Author</option>
            <option value="isbn">ISBN</option>
            <option value="keyword">Keyword</option>
          </select>
          <br />
           <input type="button" id="searchButton" value="Search" onClick="doSearch();" /><br />

        </div>
        <div id="results"></div>
       </td>
       <td class="td2"></td>
       <td class="column">
        <strong>Customer Support:</strong><br />
        <br />
        Order Status<br />
        Customer Service <br /><br />
        <a href="search.php">Search Books</a>
       </td>
     </tr>
     <tr>
       <td id="td5" colspan="5">&copy; Copyright 2013, Textbook Buyer, Inc. All rights reserved.
       </td>
     </tr>
    </table>

</body>
</html>

1 个答案:

答案 0 :(得分:1)

此代码中存在多个语法错误:

foreach ($books as $book) // this is invalid given the lines below it and the lines at 
// the end of the page.  You forgot to open this:

foreach ($books as $book) { //this is what it should be.

$author .= $author->item($j)->getElementsByTagName("firstname")->item(0)->firstchild->nodevalue;
$author .= " " . $authors->item($j)->getElementsByTagName("lastname")-item(0)->firstchild->nodevalue;

$isbn10 = $isbn10t->item(0)->firstchild->nodevalue;

$descreption = $desc->item(0)->firstchild->nodevalue;

print $books->getElementsByTagName("ISBN13")->item(0)->firstchild->nodevalue."<br />";
//         ^ not to mention, you need to delete this S      ^   and    ^ both need to be upper-case

// The above lines(and pretty much every single instance in which you use those two
// methods) are using an incorrect property.  nodevalue should be nodeValue,
// firstchild should be firstChild.  The capital C/V makes all the difference.

$num++
   // ^ no semi-colon

print "Author: {$author}<br />"
                            // ^ no semi-colon

print "<br />"
         //   ^ again, no semi-colon

// the below..

$author .= $author->item($j)->getElementsByTagName("firstname")->item(0)->firstchild->nodevalue;

//should be this:

$author .= $authors->item($j)->getElementsByTagName("firstname")->item(0)->firstchild->nodevalue;
//                ^ notice the s here

$author .= " " . $authors->item($j)->getElementsByTagName("lastname")-item(0)->firstchild->nodevalue;
//                                                                    ^ forgot a key character, the >

此:

if (empty($searchstr)
    || searchtype == "title" && eregi($searchstr,$title)
    || $searchtype == "isbn" && (eregi($searchstr, $author)
    || $searchtype == "keyword" && (eregi($searchstr, $title) || eregi($searchstr, $description)

应该类似于......(记得关闭你的())(这主要是猜测,因为我不知道这段代码的目的):

if (empty($searchstr)
    || searchtype == "title" && eregi($searchstr,$title)
//    ^ forgot the $ here, unless you have a constant called 'searchtype'
    || $searchtype == "isbn" && (eregi($searchstr, $author))
    || $searchtype == "keyword" && (eregi($searchstr, $title) || eregi($searchstr, $description)))

最后,就在这里:

print " ISBN-10: " . $isbn10->item(0)->firstchild-nodevalue . "<br />";
// The C and V need to be upper case and          ^ you forgot the >

修复了所有这些错误,代码对我来说很好。