下面是我的xml
<div class="image">
<img src="">
<div class="image-text"><p class="border_style">work </p></div>
</div>我想获取class=“图像文本”中的所有内容。
输出
<p class="border_style">work </p>我如何使用XPath来完成这个任务呢?或者其他方法?
我试过这个,
$image->xpath("*[@class='image-text']"),但没有起作用。
请指点
新的
$i = 0;
$imageXmlParts = $xmlobject->xpath("//div[@class='block-image']");
$imageText = $xmlobject->xpath("//*[@class='block-image-text']");
foreach ( $imageText as $image ){
echo $image->asXML().PHP_EOL;
$out = "";
foreach ( $image->children() as $content ) {
$out .= $content->asXML();
}
echo $out.PHP_EOL;
}
foreach ($imageXmlParts as $imageXml) {
$i++;
$imagedata = array(
'template' => (string) $this->template,
'src' => (string) $imageXml->img['src'],
'imagetext' => ///need to add here
));
}发布于 2018-09-11 16:25:53
使用你所拥有的XPath应该可以得到以下信息.
$imageText = $image->xpath("//*[@class='image-text']");
echo $imageText[0]->asXML().PHP_EOL;给..。
<div class="image-text">
<p class="border_style">work </p>
</div>它包括节点本身。使用[0]提供与XPath表达式匹配的第一项,因为xpath()总是返回匹配的数组。
如果您只想要内容,那么您必须从找到的子节点构建它.
$out = "";
foreach ( $imageText[0]->children() as $content ) {
$out .= $content->asXML();
}
echo $out;这只会给..。
<p class="border_style">work </p>更新:
为了将其添加到代码中,我对其进行了一些重构,以便它开始查找外部标记(我认为使用称为块映像的类),然后遍历它。然后,它在这个元素中使用XPath来查找它的文本。
$imageXmlParts = $image->xpath("//*[@class='block-image']");
$imagedata = array();
foreach ( $imageXmlParts as $imageXml ){
$text = $imageXml->xpath("descendant::div[@class='block-image-text']");
$out = "";
foreach ( $text[0]->children() as $content ) {
$out .= $content->asXML();
}
if ( $out == "" ) {
$out = (string)$text[0];
}
$imagedata[] = array(
'template' => (string) $this->template,
'src' => (string) $imageXml->img['src'],
'imagetext' => $out
);
}最终更新:
从节点中提取XML,然后删除标记可能更容易一些-
$out = $text[0]->asXML();给你..。
<div class="block-image-text">
<p class="border_style">work </p>
aaaa
</div>您可能可以使用正则表达式来移除标记,但是我选择了简单的替换和切分string off方法的最后一部分.
foreach ( $imageXmlParts as $imageXml ){
$text = $imageXml->xpath("descendant::div[@class='block-image-text']");
$out = $text[0]->asXML();
$out = str_replace('<div class="block-image-text">', '', $out);
$out = substr($out, 0, -6);
$imagedata[] = array(
'template' => (string) '$this->template',
'src' => (string) $imageXml->img['src'],
'imagetext' => $out
);
}https://stackoverflow.com/questions/52280174
复制相似问题