#php #xml #xpath #simplexml
#php #xml #xpath #simplexml
Вопрос:
Совершенно новичок в использовании библиотеки simple XML в PHP и использовал синтаксис w3 xpath для помощи.
У меня есть XML-файл, который выглядит примерно так:
<Xml_Configs>
<Foo_Module>
<Front_Name>a</Front_Name>
</Foo_Module>
<Bar_Module>
<Front_Name>b</Front_Name>
</Bar_Module>
<Baz_Module>
<Front_Name>c</Front_Name>
</Baz_Module>
</Xml_Configs>
Я пытаюсь выяснить, какой модуль имеет Front_Name из b . Прямо сейчас я только пытался сопоставить только атрибут, не заботясь о получении родительского элемента, и вот что я попробовал:
$xmlObj->xpath('/Xml_Configs/*[@Front_Name="b"]');
Однако это ничего мне не дает: «/Xml_Configs/*/ Front_Name» дает мне массив простых xml-объектов с a, b и c . И «/Xml_Configs/*/[@Front_Name= «b»]» выдает мне недопустимые ошибки выражения.
Любая помощь, которую вы можете оказать, приветствуется, спасибо!
Ответ №1:
Я пытаюсь выяснить, какой модуль имеет Front_Name из b
`$xmlObj->xpath('/Xml_Configs/*[@Front_Name="b"]');` That gets me nothing
Да, потому что ни один из элементов, которые являются дочерними элементами верхнего элемента Xml_Configs
, не имеет никаких атрибутов.
Вы хотите:
/*/*[Front_Name = 'b']
При этом выбираются все дочерние элементы верхнего элемента, у которых есть дочернее имя со Font_Name
строковым значением "b"
.
Проверка на основе XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select="/*/*[Front_Name = 'b']"/>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к предоставленному XML-документу:
<Xml_Configs>
<Foo_Module>
<Front_Name>a</Front_Name>
</Foo_Module>
<Bar_Module>
<Front_Name>b</Front_Name>
</Bar_Module>
<Baz_Module>
<Front_Name>c</Front_Name>
</Baz_Module>
</Xml_Configs>
он копирует на вывод выбранный узел:
<Bar_Module>
<Front_Name>b</Front_Name>
</Bar_Module>
Я бы рекомендовал вам приобрести XPath Visualizer — инструмент, который помог тысячам разработчиков изучить XPath, одновременно получая удовольствие.