PHP Xpath:Get all href';包含“;“信”;

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

假设我有一个已加载的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,"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文件。你能再看一下原来的帖子吗?我编辑了顶部的部分,以包括我从何处获取内容。您可以尝试使用此解析器:为我工作。如果你需要一个例子,让我知道,但它在文档中非常清楚。