PHP Xpath:Get all href';包含“;“信”;
假设我有一个已加载的html文件,我运行以下查询:PHP Xpath:Get all href';包含“;“信”;,php,xpath,html-parsing,Php,Xpath,Html Parsing,假设我有一个已加载的html文件,我运行以下查询: $url = 'http://www.fangraphs.com/players.aspx'; $html = file_get_contents($url); $myDom = new DOMDocument; $myDom->formatOutput = true; @$myDom->loadHTML($html); $anchor = $xpath->query('//a[contains(@href,"lett
$url = 'http://www.fangraphs.com/players.aspx';
$html = file_get_contents($url);
$myDom = new DOMDocument;
$myDom->formatOutput = true;
@$myDom->loadHTML($html);
$anchor = $xpath->query('//a[contains(@href,"letter")]');
这为我提供了这些锚的列表,如下所示:
<a href="players.aspx?letter=Aa">Aa</a>
$xpath = new DOMXPath($myDom);
$newDom = new DOMDocument;
$j = 0;
while( $myAnchor = $anchor->item($j++) ){
$node = $newDom->importNode( $myAnchor, true ); // import node
$newDom->appendChild($node);
}
但这给了我一个php错误,当我尝试以下操作时,我无法附加节点:
<a href="players.aspx?letter=Aa">Aa</a>
$xpath = new DOMXPath($myDom);
$newDom = new DOMDocument;
$j = 0;
while( $myAnchor = $anchor->item($j++) ){
$node = $newDom->importNode( $myAnchor, true ); // import node
$newDom->appendChild($node);
}
知道如何仅获取第一个查询选择的href标记的值吗??谢谢 试试这个
$xml_string = 'your xml string';
$xml = simplexml_load_string($xml_string);
foreach($xml->a[0]->attributes() as $href => $value) {
$myAnchorsValues[] = $value;
}
var_dump($myAnchorsValues);
使用:
//a/@href[contains(., 'letter')]
这将选择任何
a
的href
属性,该属性的字符串值(属性的)包含字符串“字母”
您的XPath查询返回的是属性本身(即DOMAttr
对象),而不是元素(即DOMElement
对象)。这很好,这似乎是您想要的,但将它们附加到文档中是个问题。DOMAttr
不是文档树中的独立节点;它与domeElement
关联,但不是通常意义上的子元素。因此,将DOMAttr
直接附加到文档是无效的
发件人:
<>代码> Atf./Cord:>对象继承了<代码>节点< /C>接口,但由于它们实际上不是它们描述的元素的子节点,DOM不认为它们是文档树的一部分。DOM认为属性是元素的属性,而不是与它们关联的元素具有单独的标识
将DOMAttr
与domeElement
关联并附加该元素,或者拉出DOMAttr
的值并根据需要使用该值
要仅附加其纯文本值,请在DOMText
节点中使用其值并附加该值。例如,更改此行:
$newDom->appendChild($node);
为此:
$newDom->appendChild(new DOMText($node->value));
这对我来说没有任何错误。。我可以看更多的代码吗,比如xml,它是新DOM的DOM吗?是的,对不起,我不清楚。它不是XML,而是加载到的HTML文件。你能再看一下原来的帖子吗?我编辑了它的顶部,以反映我是如何获得DOM的。仍然不够--您缺少
xpath
和newDom
初始化的位置抱歉,它们刚刚初始化,所以我忽略了它们。我已将它们添加到最后一个代码段中。(在顶部)。再看看?很抱歉给您带来麻烦。您看了吗?实际上它不是xml…它是加载到DOMDocument中的HTML文件。你能再看一下原来的帖子吗?我编辑了顶部的部分,以包括我从何处获取内容。您可以尝试使用此解析器:为我工作。如果你需要一个例子,让我知道,但它在文档中非常清楚。