Простые вопросы XML Xpath Query - PullRequest
2 голосов
/ 16 октября 2011

Совершенно новичок в использовании простой библиотеки 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 Ответ

1 голос
/ 16 октября 2011

Я пытаюсь выяснить, какой модуль имеет 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, одновременно развлекаясь.

...