У меня есть этот код
$XMLTranslationObject = new DOMDocument(); $XMLTranslationObject->load("../xdata/xml/translation/en-US/profile.xml"); $Xpath = new DOMXpath($XMLTranslationObject); $Result = $Xpath->evaluate("Field[@Name = 'AttachedFiles']")->nodeValue; echo $Result;
и xml
<?xml version="1.0" encoding="ISO-8859-1"?> <Translation language="en-US"> <!-- Basic Begin --> <Field Name="SiteName">Brainfavor</Field> <Field Name="Error">Error</Field> <!-- Basic End --> <!-- Header Begin --> <Field Name="Name">Name</Field> <Field Name="WorkingAt">Working at</Field> <Field Name="Phone">Phone</Field>
ведьма дает мне следующую ошибку
Примечание. Неопределенное свойство: DOMNodeList :: $ nodeValue в C: \ xampp \ htdocs \ brainbook \ profile \ loadmore.php в строке 30
Все, что я хочу, это получить значение строки, где имя поля AttachedFiles
, просто запустить простой запрос Xpath и получить результат. Использование XSLT легко
<xsl:value-of select="$TranslationProfile/Field[@Name = 'AttachedFiles']"/>
но раньше я не использовал PHP Xpath.
Правильная формулировка
$Xpath->evaluate("string(Field[@Name = 'AttachedFiles'])");
Это работает, потому что string
функция преобразует набор узлов (который в этом случае будет состоять всего из одного узла) до значения первого узла в наборе.
Предупреждение: это означает, что если есть несколько элементов, которые соответствуют запросу, только первое (в порядке документа) вернет его значение.