2012-01-24 228 views
5

我有一個XML文檔類似如下:的XPath:選擇直接子元素

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

我希望能夠得到父母的直接孩子(或我指定的元素),這樣我就必須child1,child2和child3節點。

可能嗎?

+0

[this]中的'child'(http://www.w3schools.com/xsl/xpath_axes.asp)可能會有幫助。 – shellbye

回答

9

甚至:

/*/* 

這會選擇XML文檔的頂層元素(在您的案例中名爲parent)的所有元素 - 子元素。

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> 
4

這應該選擇<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 
+0

嗯,這不適合我,但這樣做:// parent/* –

+0

@NicHubbard對我使用PHP的'DOMDocument'和'DOMXpath'。這是你的實際XML嗎? – Phil

+0

不,這只是一個例子,但是我需要解決這個想法。 –