Php 使用XPATH列出不包含内容的XML子元素名称

Php 使用XPATH列出不包含内容的XML子元素名称,php,xml,xpath,Php,Xml,Xpath,考虑以下简单的XML模式: <products> <category name="furniture"> <item name="chair"> <size> <small>10</small> ...and many more <large>20</large&g

考虑以下简单的XML模式:

<products>
    <category name="furniture">
        <item name="chair">
            <size>
                <small>10</small>
                ...and many more
                <large>20</large>
            </size>
        </item>
    </category>
</products>
我正在寻找以下输出:

small
...rest of elements
large

Xpath表达式中有一些错误。第一个=位于错误位置,椅子字符串缺少结束引号。添加
/*
可以直接选择大小的子节点

/products/category[@name='furniture']/item[@name='chair']/size/*
使用DOMDocument的完整源代码:

$xml = <<<'XML'
  <products>
    <category name="furniture">
        <item name="chair">
            <size>
                <small>10</small>
                <large>20</large>
            </size>
        </item>
    </category>
  </products>
XML;

$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXPath($dom);

$nodes = $xpath->evaluate("/products/category[@name='furniture']/item[@name='chair']/size/*");

foreach ($nodes as $node) {
  echo $node->localName, "\n";
}
$xml=localName,“\n”;
}
/products/category[@name='furniture']/item[@name='chair']/size/*
$xml = <<<'XML'
  <products>
    <category name="furniture">
        <item name="chair">
            <size>
                <small>10</small>
                <large>20</large>
            </size>
        </item>
    </category>
  </products>
XML;

$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXPath($dom);

$nodes = $xpath->evaluate("/products/category[@name='furniture']/item[@name='chair']/size/*");

foreach ($nodes as $node) {
  echo $node->localName, "\n";
}