Xpath: выбор прямых дочерних элементов - PullRequest
7 голосов
/ 24 января 2012

У меня есть XML-документ, подобный следующему:

<parent>
<child1>
  <data1>some data</data1>
</child1>
<child2>
  <data2>some data</data2>
</child2>
<child3>
  <data3>some data</data3>
</child3>
</parent>

Я хотел бы иметь возможность получить прямые дочерние элементы parent (или указанный мной элемент), чтобы у меня были child1, child2 иузлы child3.

Возможно?

Ответы [ 2 ]

10 голосов
/ 24 января 2012

Или даже:

/*/*

это выбирает все элементы - дочерние элементы верхнего элемента (в вашем случае с именем parent) XML-документа.

Проверка на основе 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="/*/*"/>
 </xsl:template>
</xsl:stylesheet>

когда это преобразование применяется к предоставленному документу XML :

<parent>
    <child1>
        <data1>some data</data1>
    </child1>
    <child2>
        <data2>some data</data2>
    </child2>
    <child3>
        <data3>some data</data3>
    </child3>
</parent>

вычисляется выражение XPath и выводятся выбранные узлы :

<child1>
   <data1>some data</data1>
</child1>
<child2>
   <data2>some data</data2>
</child2>
<child3>
   <data3>some data</data3>
</child3>
6 голосов
/ 24 января 2012

Это должно выбрать все дочерние элементы <parent>

/parent/*

Пример PHP

$xml = <<<_XML
<parent>
  <child1>
    <data1>some data</data1>
  </child1>
  <child2>
    <data2>some data</data2>
  </child2>
  <child3>
    <data3>some data</data3>
  </child3>
</parent>
_XML;

$doc = new DOMDocument();
$doc->loadXML($xml);

$xpath = new DOMXPath($doc);
$children = $xpath->query('/parent/*');
foreach ($children as $child) {
    echo $child->nodeName, PHP_EOL;
}

Производит

child1
child2
child3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...