解析并过滤XML

时间:2014-04-26 13:18:15

标签: php xml parsing filter

我想用 Simple DOM Parser 解析XML。我的代码正确地返回"uri"标记的所有所需内容。

示例:

"http://www.domain.com/Start/A/93243"
"http://www.domain.com/Start/B/239483"
"http://www.domain.com/Start/C/93433"
"http://www.domain.com/Start/B/34299"
"http://www.domain.com/Start/A/234343"

现在我需要过滤返回的值。我的脚本只应返回以特定文字开头的"uri"内容,例如"http://www.domain.com/Start/A/"。所以我的结果应该是:

"http://www.domain.com/Start/A/93243"
"http://www.domain.com/Start/A/234343"

这是我的开始代码:

<?php 
require_once ('simple_html_dom.php');

$dom = new DOMDocument;
$dom->load( 'xml-url' );

$uri = $dom->getElementsByTagName('uri');

foreach ($uri as $uri) {
    echo $uri->nodeValue, PHP_EOL;
}

?>

2 个答案:

答案 0 :(得分:0)

您可以使用strpos()返回搜索字符串的索引,以便检查它是否为0,这意味着它以搜索字符串开头。

foreach ($uri as $uri) {
    if(strpos($uri->nodeValue, 'http://www.domain.com/Start/A/') === 0){
        echo $uri->nodeValue, PHP_EOL;
    }
}

答案 1 :(得分:0)

您包含一个库,但您正在使用DOMDocument。所以你不需要图书馆。 DOMDocument是PHP ext / dom的一部分。这是另一个允许您将Xpath用于DOM文档中的节点的类。

选择所有href个元素节点的所有a个属性节点:

//a/@href

按字符串前缀过滤它们:

//a/@href[starts-with(., "http://www.domain.com/Start/A/")]

DOMXpath :: evaluate()是您需要用来获取节点的方法:

$hrefs = $xpath->evaluate(
  '//a/@href[starts-with(., "http://www.domain.com/Start/A/")]'
);

完整示例:https://eval.in/142509

$xml = <<<'XML'
<body>
<a href="http://www.domain.com/Start/A/93243">1</a>
<a href="http://www.domain.com/Start/B/239483">1</a>
<a href="http://www.domain.com/Start/C/93433">1</a>
<a href="http://www.domain.com/Start/B/34299">1</a>
<a href="http://www.domain.com/Start/A/234343">1</a>
</body>
XML;

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

$hrefs = $xpath->evaluate(
  '//a/@href[starts-with(., "http://www.domain.com/Start/A/")]'
);

foreach ($hrefs as $hrefAttribute) {
  var_dump($hrefAttribute->value);
}

输出:

string(35) "http://www.domain.com/Start/A/93243"
string(36) "http://www.domain.com/Start/A/234343"