#php #xml
#php #xml
Вопрос:
Как отобразить только второй элемент из XML с помощью этого PHP-скрипта?
<xml>
<item>
<name>Examplename</name>
<amount>0000</amount>
</item>
<item>
<name>Examplename</name>
<amount>0000</amount>
</item>
<item>
<name>Examplename</name>
<amount >0000</amount>
</item>
<item>
<name>DExamplename</name>
<amount>0000</amount>
</item>
</xml>
<?
// DOMElement->getElementsByTagName() -- Gets elements by tagname
// nodeValue : The value of this node, depending on its type.
// Load XML File. You can use loadXML if you wish to load XML data from a string
$objDOM = new DOMDocument();
$objDOM->load("feed.xml"); //make sure path is correct
$note = $objDOM->getElementsByTagName("item");
// for each note tag, parse the document and get values for
// tasks and details tag.
foreach( $note as $value ){
$places = $value->getElementsByTagName("name");
$place = $places->item(0)->nodeValue;
$details = $value->getElementsByTagName("amount");
$detail = $details->item(0)->nodeValue;
echo "<BODY STYLE='background-color:transparent'>
<table border='0'>
<tr>
<td width='127'><table width='127px' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td><p style='font-family:arial;color:white;font-size:22px;padding-left:3px;text-align:left; background:url(bg2.png)'><strong> $place</strong></p></td>
</tr>
</table>
</td>
<td width='115'>
<table width='115px' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td><p style='font-family:arial;color:white;font-size:22px;text-align:right;padding-right:5px; background:url(bg1.png)'><strong>$detail</strong></p></td>
</tr>
</table></td>
</tr>
</table>
";
$i ; }
?>
Ответ №1:
Вам нужно использовать XPath
Используя SimpleXML:
<?php
$str = <<<STR
<?xml version="1.0" encoding="utf-8"?>
<XmlDoc>
<item>
text
</item>
<item>
text2
</item>
</XmlDoc>
STR;
$xml = simplexml_load_string($str);
$second_item = $xml->xpath('//item[2]'); // notice [2]!
var_export($second_item);
Используя DOMDocument и DOMXPath:
<?php
$str = <<<STR
<?xml version="1.0" encoding="utf-8"?>
<xml>
<item>
<name>Examplename</name>
<amount>0000</amount>
</item>
<item>
<name>Examplename</name>
<amount>0000</amount>
</item>
<item>
<name>Examplename</name>
<amount >0000</amount>
</item>
<item>
<name>DExamplename</name>
<amount>0000</amount>
</item>
</xml>
STR;
$xml = DOMDocument::loadXML($str);
$xpath = new DOMXpath($xml);
$x = $xpath->query('//item[2]');
var_export($x->item(0)->nodeValue);
Комментарии:
1. Я не могу изменить XML-файл, хотя он размещен кем-то другим, и многие другие сайты используют канал. Есть другие предложения? Спасибо за помощь, кстати.
2. Вам не нужно изменять XML. Вы просто загружаете его с помощью SimpleXML или DOCDocument.
3. Я получил требуемую строку для отображения, все работает нормально, спасибо. Но как мне сделать так, чтобы мне не приходилось вводить XML-данные самостоятельно, а чтобы они вставлялись из исходного канала? Я пошел путем SimpleXML.