Вот пример, который я протестировал, используя XSLTProcessor :
<?php
$xsl = new DOMDocument();
$xsl->loadXML('<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="code" />
<xsl:template match="/">
<xsl:for-each select="ES/clima[@code=$code]">
<xsl:value-of select="@value"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>');
$xml = new DOMDocument();
$xml->load("data.xml"); // this is the name of your XML data file
$proc = new XSLTProcessor();
$proc->importStylesheet($xsl);
$code = 19; // or whatever code you're looking for
$proc->setParameter('', 'code', $code);
echo $proc->transformToXML($xml);
Выход:
Tormenta de tierra
Извините, что здесь используются классы, но это работает. Вам не нужно писать никаких циклов в PHP. Он просто возвращает значение, которое вы ищете.
Вы также можете сохранить таблицу стилей XSL в файле и загрузить ее по имени файла вместо примера, который я показал, загружая его литеральной строкой.
Комментарий от @VolkerK: я пытался синхронизировать эти три решения, но запускал их 10000 раз в сценарии PHP CLI и использовал microtime(true)
до и после.
- XSLP-процессор (решение Билла Карвина): 5,74 с
- SimpleXML с XPath (решение @ VolkerK): 3,94 с
- SimpleXML без XPath (решение @Kieran Allen): 3,91сек
- fgets / sscanf (@John at решение CashCommons): 3.45сек