假设我有一个已加载的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>
但我需要一种方法只能获得“players.aspx?letter = Aa”。
我以为我可以试试:
$anchor = $xpath->query('//a[contains(@href,"letter")]/@href');
但是这给了我一个php错误,说我尝试以下时无法追加节点:
$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标签的值吗?谢谢!
答案 0 :(得分:3)
使用强>:
//a/@href[contains(., 'letter')]
这将选择任何href
的{{1}}属性,其字符串值(属性)包含字符串a
。
答案 1 :(得分:0)
试试这个..
$xml_string = 'your xml string';
$xml = simplexml_load_string($xml_string);
foreach($xml->a[0]->attributes() as $href => $value) {
$myAnchorsValues[] = $value;
}
var_dump($myAnchorsValues);
答案 2 :(得分:0)
您的XPath查询本身返回属性(即DOMAttr
个对象)而不是元素(即DOMElement
个对象)。这很好,这似乎是你想要的,但将它们附加到文档是问题所在。 DOMAttr
不是文档树中的独立节点;它与DOMElement
相关联,但通常意义上不是孩子。因此,直接在文档中附加DOMAttr
无效。
Attr
个对象继承Node
接口,但由于它们实际上不是它们描述的元素的子节点,因此DOM不认为它们是文档树的一部分。 。 。 。 DOM认为属性是元素的属性,而不是与它们关联的元素具有单独的标识
将DOMAttr
与DOMElement
相关联,然后附加该元素,或者提取DOMAttr
的值并按照您的意愿使用它。
要仅添加其纯文本值,请在DOMText
节点中使用其值并附加该值。例如,更改此行:
$newDom->appendChild($node);
到此:
$newDom->appendChild(new DOMText($node->value));