0

次の XML の属性を抽出する際に問題が発生しています。次の属性を取得できます。

<Formats>
   <Format Type="6" Price="7.00" MaxDownloads="3" Status="active" ExclusiveRights="CA AU NZ ZA GB IE " NotForSale="AU NZ " />
 </Formats>

しかし、次の属性を取得するのに苦労しています:

<Contributors>
    <Contributor Code="A01" Text="By (author)">Cairns, Warwick</Contributor>
   </Contributors>

「A01」と「ケアンズ、ワーウィック」の両方が必要です。

どんな助けでも大歓迎です。

ジュリアン

以下の XML:

<?xml version="1.0"?>
    <Extract>
      <EBook EAN="9781849892100">
        <Title>About The Size Of It</Title>
        <SubTitle>A Common Sense Approach To How People Measure Things</SubTitle>
        <Publisher>General Non-Fiction</Publisher>
        <Imprint>Macmillan</Imprint>
        <PublicationDate>07/04/2011</PublicationDate>
        <Contributors>
          <Contributor Code="A01" Text="By (author)">Cairns, Warwick</Contributor>
        </Contributors>
        <BicSubjects>
          <Bic Code="PDZ">Popular science</Bic>
        </BicSubjects>
        <Formats>
          <Format Type="6" Price="7.00" MaxDownloads="3" Status="active" ExclusiveRights="CA AU NZ ZA GB IE " NotForSale="AU NZ " />
        </Formats>
        <ShortDescription>     A serious and seriously funny book about weights and measures. It explains what they are, how they come about and how they are formed and shaped by the one guiding principle of measurement that no one ever mentions: that most of us have better things to think about. This is the only book devoted to the mishmash of bodges, estimates   </ShortDescription>
        <PhysicalEditionEan>9780330450300</PhysicalEditionEan>
      </EBook>
    </Extract>

必要な値を取得するためのこれまでのコード。引き抜けない属性:(

$z = new XMLReader;
$z->open('files/eBiblio.xml');

$doc = new DOMDocument;

# move to the first node
while ($z->read() && $z->name !== 'EBook');

# now that we're at the right depth, hop to the next <product/> until the end of the tree
while ($z->name === 'EBook')
{

    $node = simplexml_import_dom($doc->importNode($z->expand(), true));

    # Get the value of each node
    $title = mysql_real_escape_string($node->Title);
    $Subtitle = mysql_real_escape_string($node->SubTitle);
    $ShortDescription = mysql_real_escape_string($node->ShortDescription);
    $Publisher = mysql_real_escape_string($node->Publisher);
    $Imprint = mysql_real_escape_string($node->Imprint);

    # Get attributes
    $isbn = $z->getAttribute('EAN');

    $contributor = $node->Contributors;
    $author = $contributor[0]->Contributor;
    $author = mysql_real_escape_string($author);

    $BicSubjects = $node->BicSubjects;
    $Bic = $BicSubjects[0]->Bic;
    $Bic = mysql_real_escape_string($Bic);


    $formats = $node->Formats;
    $type  = $formats[0]->Format;
    $price = $type[0]['Price'];
    $ExclusiveRights = $type[0]['ExclusiveRights'];
    $NotForSale = $type[0]['NotForSale'];

    # echo "<pre>".print_r($node,true)."</pre>";
    # die();
4

2 に答える 2

0

//これは役に立つかもしれません

<?php

$cxn = mysql_connect('localhost', 'XXXX', 'XXXXXXXXX');

$xml = simplexml_load_file('graph.xml');

//print_r($xml);

//$ebook = $xml->EBook;

//get attribute
//echo($ebook->attributes()->EAN);

//get Contributors value
//echo $ebook->Contributors->Contributor;

foreach($xml->EBook as $ebook)
{

   //echo $ebook->Contributors->Contributor;

    $title = mysql_real_escape_string($ebook->Title);
    $Subtitle = mysql_real_escape_string($ebook->SubTitle);
    $ShortDescription = mysql_real_escape_string($ebook->ShortDescription);
    $Publisher = mysql_real_escape_string($ebook->Publisher);
    $Imprint = mysql_real_escape_string($ebook->Imprint);

    # Get attributes
    $isbn = $ebook->attributes()->EAN;

    $contributor = $ebook->Contributors;
    $author = $ebook->Contributors->Contributor;
    $author = mysql_real_escape_string($author);

    foreach($xml->EBook->Contributors->children() as $data)
    {

        $Code = $data->attributes()->Code;
        $Text = $data->attributes()->Code;
        /*
         print_r($data);
        die(); */
    }


    $BicSubjects = $ebook->BicSubjects;
    $Bic = $ebook->BicSubjects->Bic;
    $Bic = mysql_real_escape_string($Bic);


    $formats = $ebook->Formats;


    foreach($ebook->Formats->Format->children() as $child)
    {
        $type  = $child->attributes()->Type;
        $price = $child->attributes()->Price;
        $ExclusiveRights = $child->attributes()->ExclusiveRights;
        $NotForSale = $child->attributes()->NotForSale;
    }

}
于 2013-07-12T14:27:11.007 に答える