Php DOM XML解析限制结果值
我被这件事缠住了,在网上找不到答案。我想使用DOM加载XML。 我有一个具有以下方案的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&
<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中完成了它。它工作得很好。谢谢。我明白你的意思,我会把它和上面的答案结合起来。谢谢\我理解你的意思,我将把它与上面的答案结合起来。谢谢\