Php DOM XML解析限制结果值

Php DOM XML解析限制结果值,php,dom,xml-parsing,Php,Dom,Xml Parsing,我被这件事缠住了,在网上找不到答案。我想使用DOM加载XML。 我有一个具有以下方案的XML: <type1> <other>...</other> <number>bla</number> <other>...</other> </type1> <type1> <other>...</other> <number>bla&

我被这件事缠住了,在网上找不到答案。我想使用DOM加载XML。 我有一个具有以下方案的XML:

<type1>
   <other>...</other>
   <number>bla</number>
   <other>...</other>
</type1>
<type1>
   <other>...</other>
   <number>bla</number>
   <other>...</other>
</type1>
...
<type2>
   <other>...</other>
   <number>bla</number>
   <other>...</other>
</type2>
<type2>
   <other>...</other>
   <number>bla</number>
   <other>...</other>
</type2>
我得到两种类型的数字。我怎样才能只得到type1或type2的号码

更新: 根据Kami和Ikku的建议,我已经为DOM解决了这个问题。以下为工作代码:

<?php  
$xmlHandler = new DOMDocument();
$xmlHandler->load("xmldocumentname.xml");

$xpath = new DOMXPath($xmlHandler);
$searchNodes = $xpath->query("/type1");
foreach( $searchNodes as $searchNode ) { 
    $xmlItem = $searchNode->getElementsByTagName("number"); 
    $number = $xmlItem->item(0)->nodeValue; 
    $xmlItem = $searchNode->getElementsByTagName("other"); 
    $other = $xmlItem->item(0)->nodeValue; 

    echo "NUMBER=" . $number . "<br>";
    echo "OTHER=" . $other . "<br>";

}
?> 


我想首先搜索所有必需的类型(1或2),然后在结果集中搜索必需的标记名。因此,一个两步过程,可能组合在一行中,您必须检查在这两步工作时是否可以优化它。

我想首先搜索所有必需的类型(1或2),然后在结果集中搜索必需的标记名。因此,一个两步流程,可能组合在一行中,您必须检查在这两个步骤起作用时是否可以对其进行优化。

您需要扩展搜索以允许父级的特定值。
getElementsByTagName
将您限制为要查找的标记的名称,因此它无法进行常规搜索。使用更通用的搜索。我正在使用下面示例中的
simplexml
库中的
xpath

$xmlHandler = simplexml_load_file("somexmlfile.xml");

$searchNode = $xmlHandler->xpath("type1/number"); // Gets type1 numbers
$searchNode = $xmlHandler->xpath("type2/number"); // Gets type2 numbers
对DOM也要这样做——创建xpath对象需要额外的步骤,但这是使搜索更容易所必需的

// Create new DOM object:
$dom = new DomDocument();
$dom->loadXML($xml);

$xpath = new DOMXPath($dom);
$searchNode = $xpath->query("type1/number");
$searchNode = $xpath->query("type2/number");

以上未经检验;因此,请根据需要进行修改。

您需要展开搜索,以允许父项的特定值。
getElementsByTagName
将您限制为要查找的标记的名称,因此它无法进行常规搜索。使用更通用的搜索。我正在使用下面示例中的
simplexml
库中的
xpath

$xmlHandler = simplexml_load_file("somexmlfile.xml");

$searchNode = $xmlHandler->xpath("type1/number"); // Gets type1 numbers
$searchNode = $xmlHandler->xpath("type2/number"); // Gets type2 numbers
对DOM也要这样做——创建xpath对象需要额外的步骤,但这是使搜索更容易所必需的

// Create new DOM object:
$dom = new DomDocument();
$dom->loadXML($xml);

$xpath = new DOMXPath($dom);
$searchNode = $xpath->query("type1/number");
$searchNode = $xpath->query("type2/number");

以上未经检验;因此,请根据需要进行修改。

我正在寻找一个DOM解决方案,但我想这个simplexml解决方案背后的想法就可以了。我将尝试一下,谢谢。@Vincent这也可以使用DOM实现-我已经为您创建了一个示例。我刚刚在DOM中完成了它。它工作得很好。Kami mucho谢谢。我正在寻找一个DOM解决方案,但我想这个simplexml解决方案背后的想法就可以了。我将尝试一下,谢谢。@Vincent这也可以使用DOM实现-我已经为您创建了一个示例。我刚刚在DOM中完成了它。它工作得很好。谢谢。我明白你的意思,我会把它和上面的答案结合起来。谢谢\我理解你的意思,我将把它与上面的答案结合起来。谢谢\