我是下面的函数,我在努力输出DOMDocument而没有在内容输出之前附加XML,HTML,body和p标签包装器.建议的修复:
$postarray['post_content'] = $d->saveXML($d->getElementsByTagName('p')->item(0));
Run Code Online (Sandbox Code Playgroud)
仅在内容中没有块级元素时才有效.但是,当它执行时,如下面的例子中的h1元素,saveXML的结果输出被截断为...
<p>如果你喜欢</ p>
我已经指出这篇文章可能是一种解决方法,但是我无法理解如何将它实现到这个解决方案中(参见下面的注释).
有什么建议?
function rseo_decorate_keyword($postarray) {
global $post;
$keyword = "Jasmine Tea"
$content = "If you like <h1>jasmine tea</h1> you will really like it with Jasmine Tea flavors. This is the last ocurrence of the phrase jasmine tea within the content. If there are other instances of the keyword jasmine tea within the text what happens to jasmine tea."
$d = new DOMDocument();
@$d->loadHTML($content);
$x = new DOMXpath($d);
$count = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用PHP的SimpleXML将一些数据添加到现有的XML文件中.问题是它将所有数据添加到一行中:
<name>blah</name><class>blah</class><area>blah</area> ...
Run Code Online (Sandbox Code Playgroud)
等等.全部在一条线上.如何引入换行符?
我怎么做到这样?
<name>blah</name>
<class>blah</class>
<area>blah</area>
Run Code Online (Sandbox Code Playgroud)
我正在使用asXML()功能.
谢谢.
我刚刚开始阅读有关DOM的文档和示例,以便抓取和解析文档.
例如,我有部分文件如下所示:
<div id="showContent">
<table>
<tr>
<td>
Crap
</td>
</tr>
<tr>
<td width="172" valign="top"><a href="link"><img height="91" border="0" width="172" class="" src="img"></a></td>
<td width="10"> </td>
<td valign="top"><table cellspacing="0" cellpadding="0" border="0">
<tbody><tr>
<td height="30"><a class="px11" href="link">title</a><a><br>
<span class="px10"></span>
</a></td>
</tr>
<tr>
<td><img height="1" width="580" src="crap"></td>
</tr>
<tr>
<td align="right">
<a href="link"><img height="16" border="0" width="65" src="/buy"></a>
</td>
</tr>
<tr>
<td valign="top" class="px10">
<p style="width: 500px;">description.</p>
</td>
</tr>
</tbody></table></td>
</tr>
<tr>
<td>
Crap
</td>
</tr>
<tr>
<td>
Crap
</td>
</tr>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下代码来获取所有tr标记并分析其中是否存在垃圾或信息:
$dom …Run Code Online (Sandbox Code Playgroud) 将LIBXML_HTML_NOIMPLIED标志与html片段一起使用会生成错误的标记:
$str = '<p>Lorem ipsum dolor sit amet.</p><p>Nunc vel vehicula ante.</p>';
$doc = new DOMDocument();
$doc->loadHTML($str, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
echo $doc->saveHTML();
Run Code Online (Sandbox Code Playgroud)
输出:
<p>Lorem ipsum dolor sit amet.<p>Nunc vel vehicula ante.</p></p>
Run Code Online (Sandbox Code Playgroud)
我发现使用正则表达式可以解决这个问题,但这会破坏使用DOM的目的.我用几个版本的libxml和php测试了这个,最新的libxml 2.9.2,php 5.6.7(Debian Jessy).任何建议赞赏.
我正在尝试替换字符串中的视频链接 - 这是我的代码:
$doc = new DOMDocument();
$doc->loadHTML($content);
foreach ($doc->getElementsByTagName("a") as $link)
{
$url = $link->getAttribute("href");
if(strpos($url, ".flv"))
{
echo $link->outerHTML();
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,outerHTML当我试图获取完整超链接的html代码时不起作用<a href='http://www.myurl.com/video.flv'></a>
任何想法如何实现这一目标?
我有一个充满页面的文件夹(pages-folder),该文件夹中的每个页面都有(除其他外)一个div id="short-info".
我有一个代码<div id="short-info">...</div>从该文件夹中提取所有内容并使用textContent(显示为此目的nodeValue)显示其中的文本
加载div的代码:
<?php
$filename = glob("pages-folder/*.php");
sort($filename);
foreach ($filename as $filenamein) {
$doc = new DOMDocument();
$doc->loadHTMLFile($filenamein);
$xpath = new DOMXpath($doc);
$elements = $xpath->query("*//div[@id='short-info']");
foreach ($elements as $element) {
$nodes = $element->childNodes;
foreach ($nodes as $node) {
echo $node->textContent;
}
}
}
?>
Run Code Online (Sandbox Code Playgroud)
现在的问题是,如果我加载的页面有一个子项,如图像:<div id="short-info"> <img src="picture.jpg"> Hello world </div>,输出将只是Hello世界而不是图像,然后是Hello world.
如何使代码在div id ="short-info"中显示完整的html,包括例如图像而不仅仅是文本?
我已经查看了有关此主题的其他Stackoverflow问题,并且那里提供的解决方案似乎都不适用于我.
我有一个html页面(刮了file_get_contents()),并且html是一个id为"main"的div - 我需要用PHP的DOMDocument或类似的东西获取该div的内容.对于这种情况,我不能使用SimpleHTMLDom解析器,这会使事情变得复杂.
说我有这个HTML:
<a href="http://example.com">Test</a>
Run Code Online (Sandbox Code Playgroud)
我使用dom文档解析它与此代码:
$dom = new DomDocument();
@$dom->loadHTML($html);
$urls = $dom->getElementsByTagName('a');
Run Code Online (Sandbox Code Playgroud)
然后我运行这段代码:
foreach ($urls as $url)
{
//echo "<br> {$url->getAttribute('href')} , {$url->getAttribute('title')}";
foreach ($url->attributes as $a)
{
echo "<br>$a->name is $a->value";
}
echo "<hr><br>";
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我只看到'href'作为url的属性,没有办法得到'锚文本'(在上面的例子中'测试').如何获取链接的锚文本?
使用PHP的DOM函数获取DOMElement的innerHTML(标签和所有)的最简单方法是什么?
php ×10
domdocument ×5
dom ×4
formatting ×1
glob ×1
html ×1
html-parsing ×1
nodevalue ×1
outerhtml ×1
simplexml ×1
xml-parsing ×1