Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dom XPath节点由br连接的文本_Dom_Xpath_Libxml2_Html Treebuilder - Fatal编程技术网

Dom XPath节点由br连接的文本

Dom XPath节点由br连接的文本,dom,xpath,libxml2,html-treebuilder,Dom,Xpath,Libxml2,Html Treebuilder,如何通过br再次在br标记之间连接文本节点 下面是xml代码 <div> text1. <br> text2. <br> text3. <div>ad sense code</div> <br> text4. <div>ad sense code</div> <br> textxx. <b

如何通过br再次在br标记之间连接文本节点

下面是xml代码

<div>
    text1.
    <br>
    text2.
    <br>
    text3.
    <div>ad sense code</div>
    <br>
    text4.
    <div>ad sense code</div>
    <br>
    textxx.
    <br>
</div>
虽然我希望它是这样的:

text1.text2.text3.text4.textxx.
text1.<br>text2.<br>text3.<br>text4.<br>textxx.<br>
$text = "";
$tree = HTML::TreeBuilder::LibXML->new_from_content($content);
foreach my $node ($tree->findnodes("./div/text()[position()>1]")) {
    $text .= $node->findvalue('string(.)') . "<br>";
}
$text =~ s/<br>$//g;
text1.
text2.
text3.
text4.
textxx.
只是我需要保留br标签。 我使用的是Perl HTML::TreeBuilder::LibXML模块。

XPath可用于(a)从输入文档中选择节点,或(b)从输入文档中的节点计算字符串、布尔值或数字等原子值。它永远不能[在非常边缘的情况下例外]返回输入中不存在的节点

还不完全清楚你所期望的输出是什么意思

text1.<br>text2.<br>text3.<br>text4.<br>textxx.<br> 
text1.
text2.
text3.
text4.
textxx.
你想把它当作一根绳子吗?或者是一系列的文本节点和元素节点

在XPath 3.1中,可以使用
serialize()
函数将其作为字符串返回,但在Perl中,您只能访问古老且有限的XPath 1.0

无法将其作为一组节点返回,因为节点不在源中:源中包含具有值的文本节点,例如
“\uuuu text1\uuuuu”
,其中下划线表示空白,并且所需的输出会删除空白


您似乎正在进行转换,而不仅仅是选择,因此您脱离了XPath领域,进入了XSLT。

我能够在Perl中实现的解决方案如下所示:

text1.text2.text3.text4.textxx.
text1.<br>text2.<br>text3.<br>text4.<br>textxx.<br>
$text = "";
$tree = HTML::TreeBuilder::LibXML->new_from_content($content);
foreach my $node ($tree->findnodes("./div/text()[position()>1]")) {
    $text .= $node->findvalue('string(.)') . "<br>";
}
$text =~ s/<br>$//g;
$text=”“;
$tree=HTML::TreeBuilder::LibXML->new\u from\u content($content);
foreach my$节点($tree->findnodes(“./div/text()[position()>1]”){
$text.=$node->findvalue('string(.)')。“
”; } $text=~s/
$//g;