ThemesCreator
ThemesCreator

Reputation: 1759

get xml data by atributte value

I have this XML:

<eSummaryResult>
    <DocSum>
        <Id>11482001</Id>
        <Item Name="PubDate" Type="Date">2001 Jun</Item>
        <Item Name="EPubDate" Type="Date" />
        <Item Name="Source" Type="String">Adverse Drug React Toxicol Rev</Item>
        <Item Name="AuthorList" Type="List">
            <Item Name="Author" Type="String">Mantle D</Item>
            <Item Name="Author" Type="String">Gok MA</Item>
            <Item Name="Author" Type="String">Lennard TW</Item>
        </Item>
        <Item Name="LastAuthor" Type="String">Lennard TW</Item>
        <Item Name="Title" Type="String">Adverse and beneficial effects of plant extracts on skin and skin disorders.</Item>
        <Item Name="Volume" Type="String">20</Item>
        <Item Name="Issue" Type="String">2</Item>
        <Item Name="Pages" Type="String">89-103</Item>
        <Item Name="LangList" Type="List">
            <Item Name="Lang" Type="String">English</Item>
        </Item>
        <Item Name="NlmUniqueID" Type="String">9109474</Item>
        <Item Name="ISSN" Type="String">0964-198X</Item>
        <Item Name="ESSN" Type="String" />
        <Item Name="PubTypeList" Type="List">
            <Item Name="PubType" Type="String">Journal Article</Item>
            <Item Name="PubType" Type="String">Review</Item>
        </Item>
        <Item Name="RecordStatus" Type="String">PubMed - indexed for MEDLINE</Item>
        <Item Name="PubStatus" Type="String">ppublish</Item>
        <Item Name="ArticleIds" Type="List">
            <Item Name="pubmed" Type="String">11482001</Item>
            <Item Name="eid" Type="String">11482001</Item>
            <Item Name="rid" Type="String">11482001</Item>
        </Item>
        <Item Name="History" Type="List">
            <Item Name="pubmed" Type="Date">2001/08/03 10:00</Item>
            <Item Name="medline" Type="Date">2002/01/23 10:01</Item>
            <Item Name="entrez" Type="Date">2001/08/03 10:00</Item>
        </Item>
        <Item Name="References" Type="List" />
        <Item Name="HasAbstract" Type="Integer">1</Item>
        <Item Name="PmcRefCount" Type="Integer">3</Item>
        <Item Name="FullJournalName" Type="String">Adverse drug reactions and toxicological reviews</Item>
        <Item Name="ELocationID" Type="String" />
        <Item Name="SO" Type="String">2001 Jun;20(2):89-103</Item>
    </DocSum>
</eSummaryResult>

I would like to get some items by name vale, for example:

<Item Name="AuthorList" Type="List">
    <Item Name="Author" Type="String">Mantle D</Item>
    <Item Name="Author" Type="String">Gok MA</Item>
    <Item Name="Author" Type="String">Lennard TW</Item>
</Item>

in this code, how can i get items with Name="Author"? It have to print Mantle D, Gok MA, ...

I have found how to get the attribute value with attribute() but not this.

Thans everybody!

Upvotes: 0

Views: 61

Answers (1)

michi
michi

Reputation: 6625

simplexml and xpath will do the job:

$xml = simplexml_load_string($x); // assume XML in $x
$authors = $xml->xpath("//Item[@Name='Author']");

// echo them out
foreach ($authors as $author) echo "$author <br />";

The xpath-expression translates as: Select all <Item>-nodes - regardless of their position within the XML (double slashes) - with the attribute Name (@ refers to attribute) being set to 'Author'.

see it working: http://codepad.viper-7.com/PQSDcV

Upvotes: 1

Related Questions