#php #xml #wordpress
#php #xml #wordpress
Вопрос:
вот мой xml, я хочу перебрать propertyList и получить жилые и арендные узлы, может кто-нибудь помочь мне узнать, как я могу это сделать, также, когда я печатаю узел propertylist, он возвращает нулевой массив
<propertyList>
<residential modTime="2020-11-10-11:35:06" status="current">
<agentID/>
<uniqueID>eagle_659872</uniqueID>
<authority value="exclusive"/>
<underOffer value="no"/>
<isHomeLandPackage value="no"/>
<listingAgent id="1">
<name>Matt Luff</name>
</listingAgent>
<price display="yes">900000</price>
<priceView/>
<landDetails>
<area unit="squareMeter"/>
<frontage/>
<depth side="left"/>
<depth side="right"/>
<depth side="rear"/>
</landDetails>
</residential>
<rental modTime="2020-11-09-12:56:01" status="current">
<agentID/>
<uniqueID>eagle_662855</uniqueID>
<listingAgent id="1">
<name>Leasing Specialists </name>
</listingAgent>
<priceView>$430 per week</priceView>
<bond>1720</bond>
<landDetails>
<area unit="squareMeter"/>
<frontage/>
<depth side="left"/>
<depth side="right"/>
<depth side="rear"/>
</landDetails>
</rental>
</propertyList>
Комментарии:
1. Что вы подразумеваете под «получить жилые и арендные узлы»? Каков именно ваш ожидаемый результат?
2. на самом деле я хочу запустить один цикл и получить дочерние узлы жилых и арендуемых дочерних узлов, прямо сейчас я использую 2 цикла, чтобы получить все дочерние узлы жилых и арендуемых. в этом приведенном выше xml я вставляю только некоторую часть .. там много узлов, названных жилыми и такими же, как аренда
3. я хотел бы запустить для каждого цикла в propertylist и получить все дочерние элементы внутри него, но, к сожалению, не знаю, почему proprtylist возвращает нулевой массив
4. Опять же, я не знаю, что означает «получить всех дочерних элементов» и т. Д. Каков именно ваш ожидаемый результат?
Ответ №1:
Используйте выражения Xpath. Это позволяет вам извлекать узлы и значения из DOM.
$document = new DOMDocument();
$document->loadXML(getXML());
$xpath = new DOMXpath($document);
$expression = '/propertyList/residential|/propertyList/rental';
foreach ($xpath->evaluate($expression) as $property) {
echo $property->localName, "n";
echo 'ID: ', $xpath->evaluate('string(uniqueID)', $property);
echo 'Price: ', $xpath->evaluate('string(priceView)', $property);
echo "n";
}
Вывод:
residential
ID: eagle_659872
Price:
rental
ID: eagle_662855
Price: $430 per week
Выражение like /propertyList/residential
вернет узлы, соответствующие этому пути к местоположению. |
разделяет альтернативные выражения. Начало /
привязывает выражение к корню документа.
$xpath->evaluate('string(uniqueID)', $property)
вычисляет выражение string(uniqueID)
с $property
узлом в качестве контекста. Он содержит приведение строки, поэтому он вернет текстовое содержимое первого uniqueID
дочернего элемента node.
Это только самые основные функции. Xpath допускает гораздо более сложные выражения с условиями.