dongxiusuo9881 2013-04-23 21:41
浏览 45

php和xml解析错误:解析错误,意外T_OBJECT_OPERATOR [关闭]

I been working on a PHP page that involves reading from an XML file. However,I am seeing this error message: Parse error: parse error, unexpected T_OBJECT_OPERATOR on line 24. Yet I am not sure as to what is causing the error. So I am wondering if anyone can figure out what I am doing wrong.

<?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!";  
    }


}
}

?>

Here is an example of the XML code that I am using

<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>

Here is the code from the Search page, the page before the PHP page;

 <!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条回答 默认 最新

  • dream198731 2013-04-23 22:17
    关注

    You have several syntax errors in this code:

    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 >
    

    This:

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

    Should be something akin to.. (remember to close your ()s)(this is mostly guessing since I don't know the purpose of this code):

    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)))
    

    And finally, right here:

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

    With all of those errors fixed, the code works fine for me.

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题