我有这个网页我试图使用SimpleXMLElement来解析#href"#3"然后得到以下span-> a的内容,这将是" jim":
<?xml version='1.0'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>..</head>
<title>this is the title<title>
<body>
<script>...</script>
<div id="div1">
something
</div>
<div id="content">
<div id="src">
<pre>
<a name="1" href="#1">1</a>
<span class="myclass">
<a href="somelink123">john</a>
</span>
<a name="1" href="#2">2</a>
<span class="myclass">
<a href="somelink2342">dev</a>
</span>
<a name="1" href="#3">3</a>
<span class="myclass">
<a href="somelink33452">jim</a>
</span>
....
....
</pre>
</div>
</div>
</body>
</html>
我正在使用SimpleXMLElement来接触“预先”的孩子们。但是我如何根据属性和兄弟姐妹访问元素?
谢谢!
答案 0 :(得分:1)
使用php DomDocument
此代码将查找a#href "#3"
并找到旁边的范围。
$dom = new DOMDocument();
libxml_use_internal_errors(true);//Disable libxml errors
$dom->loadHTMLFile("test.html");//saved your html as test.html
$xpath = new DOMXPath($dom);
$spanVal = $xpath->query("//a[@href='#3']/following-sibling::*[1]");
foreach($spanVal as $span)
{
echo $span->nodeValue;
}
输出:
jim
答案 1 :(得分:0)
使用XPath和SimpleXML,您可以使用以下内容...
<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );
$xml = simplexml_load_file("t1.xml");
$xml->registerXPathNamespace("d", "http://www.w3.org/1999/xhtml");
$elements = $xml->xpath("//d:a[@href='#3']/following-sibling::d:span/d:a");
foreach ( $elements as $element ) {
echo $element;
}
我已将文件保存为t1.xml(也修复了标题的结束标记 - 因此有点欺骗以使其变得简单)。
这里最重要的是有一个默认的命名空间,如果你不包含registerXPathNamespace(在这种情况下使用&#39; d&#39;作为一个虚拟前缀)那么这些元素可以&#39找不到。您可以看到我将d:
放在每个元素名称的开头(即d:span
)
答案 2 :(得分:-1)