This question already has an answer here:
I'm trying to access the content of an element based on the value of an attribute. With PHP SimpleXML. I've got the following XML setup:
<DocSum>
<Id>21242919</Id>
<Item Name="Author" Type="String">Nguyen T</Item>
<Item Name="Title" Type="String">[Hemoptysis and spontaneous rupture of a primary renal angiosarcoma: a case report.]</Item>
</DocSum>
<DocSum>
<Id>21242919</Id>
<Item Name="Author" Type="String">Oliveira GC</Item>
<Item Name="Title" Type="String">Disclosing ambiguous gene aliases by automatic literature profiling.</Item>
</DocSum>
<DocSum>
<Id>21242919</Id>
<Item Name="Author" Type="String">Vanderwall DE</Item>
<Item Name="Title" Type="String">Metformin and digestive disorders.</Item>
</DocSum>
These are books. In this case I'm trying to get the title. What I have so far is this:
$xml = simplexml_load_file(url);
$docs = $xml->DocSum;
foreach($docs as $book){
// Each book individual
}
Where the comment is I tried a lot of things.
This XPath query on the SimpleXML object will return all
DocSum
nodes that have anItem
child with value "Author" in theName
attribute and value "Olivera GC" in the text node:Well, I suspect the solution will be
XPATH
...If you're trying to get the title of a book by the id, you'd use the query:
If you're trying to search for the title of a book:
Then just run it:
I'm converting back and forth between simplexml and domdocument since that appears to be the only documented way of traversing up the tree...