小编jon*_*h_w的帖子

cpan 无法在 macOS Catalina 上安装 XML::LibXML

我正在cpan install XML::LibXML尝试安装XML::LibXML解析器,但它不会通过。它给出了以下错误:

cc -c   -I/usr/include/libxml2  -fno-common -DPERL_DARWIN -mmacosx-version-min=10.14 -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -DPERL_USE_SAFE_PUTENV -O3   -DVERSION=\"2.0201\" -DXS_VERSION=\"2.0201\"  "-I/usr/local/Cellar/perl/5.28.1/lib/perl5/5.28.1/darwin-thread-multi-2level/CORE"  -DHAVE_UTF8 Devel.c
In file included from Devel.xs:28:
/usr/local/include/libxml/xmlmemory.h:16:10: fatal error: 'libxml/xmlversion.h'
  file not found
#include <libxml/xmlversion.h>
     ^~~~~~~~~~~~~~~~~~~~~
1 error generated.
make: *** [Devel.o] Error 1
SHLOMIF/XML-LibXML-2.0201.tar.gz
/usr/bin/make -- NOT OK
Run Code Online (Sandbox Code Playgroud)

更新: 在我手动将“开发”文件复制到后/usr/local/include/libxmlfile not found错误现在消失了,但仍然无法编译XML-LibXML

这是输出信息: 输出信息

更详细的信息:

Loading internal logger. Log::Log4perl recommended for better logging
Reading '/Users/chris/.cpan/Metadata'
Database was generated on Fri, 05 …
Run Code Online (Sandbox Code Playgroud)

xml perl xml-libxml

6
推荐指数
1
解决办法
1380
查看次数

在无效上下文中无用的否定模式绑定(!〜)

如果两个字符串都包含空格或都不包含空格,请执行某些操作。

my $with_spaces = $a =~ / / and $b =~ / /;
my $no_spaces = $a !~ / / and $b !~ / /;
if ($with_spaces or $no_spaces) {
    dosomething();
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码给出了一个错误:

在无效上下文中无用的否定模式绑定(!〜)。

我在这里做错了吗?

perl

4
推荐指数
1
解决办法
41
查看次数

perl XML::LibXML 不是选择器

在以下 HTML 片段中:

<div><p class="a b c"></p> <p class="a c"></p> <p class="d"></p> </div>

我只想使用选择器选择第二个p元素(带a类和不带b类)not,如下所示:

p.a:not(.b)

xpath对应的是

.//p[contains(concat(' ', normalize-space(@class), ' '), ' a ')][not(self::*[contains(concat(' ', normalize-space(@class), ' '), ' b ')])].

但是当我使用该 xpath 表达式时,它无法定位该元素。

还有什么可以用来实现not选择器的效果吗?

更新:似乎我犯了一个错误,因为p.a:not(.b)它的 xpath 对应物似乎对XML::LibXML.

它没有用,因为我if弄错了一个条件......

css perl xpath selector xml-libxml

2
推荐指数
1
解决办法
60
查看次数

Perl在HTML / XML标记内的单词周围添加&lt;a&gt; &lt;/a&gt;

我有一个格式像这样的文件:

Eye color
<p class="ul">Eye color, color</p> <p class="ul1">blue, cornflower blue, steely blue</p> <p class="ul1">velvet brown</p> <link rel="stylesheet" href="a.css">
</>
weasel
<p class="ul">weasel</p> <p class="ul1">musteline</p> <link rel="stylesheet" href="a.css">
</>
Run Code Online (Sandbox Code Playgroud)

<p class="ul1">分隔符内的每个单词,都应包裹在一个<a>标签中,如下所示:

Eye color
<p class="ul">Eye color, color</p> <p class="ul1"><a href="entry://blue">blue</a>, <a href="entry://cornflower blue">cornflower blue</a>, <a href="entry://steely blue">steely blue</a></p> <p class="ul1"><a href="entry://velvet brown">velvet brown</a></p> <link rel="stylesheet" href="a.css">
</>
weasel
<p class="ul">weasel</p> <p class="ul1"><a href="entry://musteline">musteline</a></p> <link rel="stylesheet" href="a.css">
</>
Run Code Online (Sandbox Code Playgroud)

<p class="ul1">标签内可能有一个或几个单词。

单线可能Perl吗?

提前致谢。任何帮助表示赞赏。

html xml perl text-processing

1
推荐指数
1
解决办法
214
查看次数

Perl嵌套if语句

我有这个perl代码,基本上可以读取每一行以找到特定的模式。针对第一条if语句指定的模式,我需要从该模式中提取一些子字符串,因此需要第二条if语句。查看输出,我发现结果不是很正确,两个if的结果之间有些绑定错误。是第二个if从第一行开始读取同一行if吗?如果没有,如何第二秒钟读取同一行if

open(DICT, "<", $file)
or die "Cannot open '$file': $!";
my %h;
while (<DICT>) {
    if (/(<p class="calibre_\d+">\s*?\d+\.\s*?(?:(?!<p).)*<\/p>)/) {
        my $entry = $1;

        if (/<p class="calibre_\d+">\s*?\d+\.\s*?\K([a-zA-Z][a-zA-Z\-_\s'’?“”=…\)()]+[a-zA-Z'\-’])/) {
            my $hw = $1;
            $h{$entry} = $hw;
        }
    }
    END{
        while (my ($k, $v) = each %h) {
            print qq{$v\n$k\n</>\n}
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

源文本文件是这样的:

A
<div class="notes"><p class="calibre_2">  ??</p><p class="calibre_2">  1.abc    ??</p>
</>
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

abc
<p class="calibre_2">  1.abc    ??</p>
</>
Run Code Online (Sandbox Code Playgroud)

也就是说,对于所有标签 …

perl

1
推荐指数
1
解决办法
173
查看次数

在Perl中开始和结束

我正在尝试从文本文件中的BEGIN块中获取某些特定模式的数据,并将其打印在END块中,如下所示:

perl -0777wnE'
BEGIN{
    while(/<mark>(.*?)<\/mark>/g){
        $hw=$1; 
        $seen{$hw}++;
    }
} 
END{
    for $key (keys %seen){
        say "$key";
    }
}
' "demo.txt" > "demo2.txt"
Run Code Online (Sandbox Code Playgroud)

但是它不会将任何内容打印到demo2.txt文件中,并且会发出以下警告:

在-e第3行的模式匹配(m //)中使用未初始化的值$ _。

但是,如果我将while块放在block之外BEGIN,像这样:

perl -0777wnE'
while(/<mark>(.*?)<\/mark>/g){
    $hw=$1; 
    $seen{$hw}++;
}
END{
    for $key (keys %seen){
        say "$key";
    }
}
' "demo.txt" > "demo2.txt"
Run Code Online (Sandbox Code Playgroud)

然后得到预期的结果。

regex perl

1
推荐指数
1
解决办法
68
查看次数

如何在 perl 中使用 XML::LibXML 获取元素的层次结构

就像在这个 HTML 片段中一样: 元素<div class="c1"><span class="c2"><b class="c3"/></span></div> 的预期层次结构b应该是:div.c1 span.c2 b.c3

perl xml-libxml

1
推荐指数
1
解决办法
61
查看次数

标签 统计

perl ×7

xml-libxml ×3

xml ×2

css ×1

html ×1

regex ×1

selector ×1

text-processing ×1

xpath ×1