标签: xml-libxml

Perl 5.8.8不支持XML :: LibXML吗?

我回答了一段时间的问题,我最初建议使用XML :: DOM.在mirod建议我使用XML :: LibXML后,我实现了它.说实话,它在我的系统上运行良好.我看到我的运行时使用新模块大幅下降而没有进行任何额外的优化.

现在是棘手的部分,由于某种原因,该模块甚至没有安装在我的同事系统上.

ppm install xml-libxml返回:下载ActiveState包存储库packlist ...未修改ppm安装失败:找不到提供xml-libxml的任何包

我在这两台机器之间找到的唯一区别是我使用的是AS Perl v5.12.1,而他是在AS perl V5.8.8上.

AS Perl v5.8.8是否支持xml-libxml?

此外,我访问了活动状态PPM索引,这似乎表明它一直打破5.8到5.12.

有没有人有这个模块的经验?我应该回滚到XML :: DOM - 它的性能很慢而且没有主动维护,至少安装和工作?

任何指针都会非常感激.

xml perl xml-libxml

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

perl - 从xml文件中删除节点

我有一个XML文件,我想读它 - 删除一个节点 - 保存它.我从终端运行perl(perl script.pl)

示例XML(filename.xml):

<?xml version="1.0" encoding="UTF-8"?>
<twice>
    <inner>
        <twice>
            <name>John</name>
            <surname>Smith</surname>
        </twice>
        <twice>
            <name>Alan</name>
            <surname>Bowler</surname>
        </twice>
        <twice>
            <name>Michael</name>
            <surname>Deck</surname>
        </twice>
    </inner>
</twice>
Run Code Online (Sandbox Code Playgroud)

示例perl脚本(script.pl):

use strict;
use warnings;
use XML::LibXML;
my $filename = "filename.xml";
my $parser = XML::LibXML->new();
my $xmldoc = $parser->parse_file($filename);
for my $dead ($xmldoc->findnodes(q{/twice/inner/twice[surname = "Bowler"]})) {
    $dead->unbindNode;
}
print $xmldoc->toString;
Run Code Online (Sandbox Code Playgroud)

现在它在终端输出预期结果,但不保存文件.
预期结果(filename.xml):

<?xml version="1.0" encoding="UTF-8"?>
<twice>
    <inner>
        <twice>
            <name>John</name>
            <surname>Smith</surname>
        </twice>
        <twice>
            <name>Michael</name>
            <surname>Deck</surname>
        </twice>
    </inner>
</twice>
Run Code Online (Sandbox Code Playgroud)

我搜索了好几个小时,找不到任何东西,对不起,如果它是重复的!
这是我第一次体验perl,所以请欢迎任何帮助,谢谢.

xml perl xml-parsing xml-libxml

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

找不到XML/LibXML.pm

我在我的Windows XP操作系统上安装了Strawberry Perl.后来我试图执行.XML文件,但它抛出错误如下.我也试过Active Perl并且也得到了同样的错误.

我在命令提示符下运行以下代码:

C:> perl xcp_conf.pl FILENAME.xml
Run Code Online (Sandbox Code Playgroud)

错误:无法在@INC中找到XML/LibXML.pm包含:C:/ Perl/site/Lib C:/ perl/Lib at xcp_conf.pl

你能告诉我在哪里下载上述文件吗?如何安装该包?

xml perl activeperl xml-libxml

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

使用Perl解析XML

总菜鸟在这里,所以我很抱歉我提前无知.

我搜索和搞砸的大部分内容都集中在使用XML::LibXMLXPath.

我遇到的问题是我不想在标签之间捕获文本:我需要标签的值.

这是我的XML结构

<users>
  <entry name="asd">
    <permissions>
      <role-based>
        <superuser>yes</superuser>
      </role-based>
    </permissions>
  </entry>
  <entry name="fgh">
    <permissions>
      <role-based>
        <superuser>yes</superuser>
      </role-based>
    </permissions>
    <authentication-profile>RSA Two-Factor</authentication-profile>
  </entry>
  <entry name="jkl">
    <permissions>
      <role-based>
        <superreader>yes</superreader>
      </role-based>
    </permissions>
    <authentication-profile>RSA Two-Factor</authentication-profile>
  </entry>
</users>
Run Code Online (Sandbox Code Playgroud)

我试图获取name属性(不带引号),并确定此人是超级用户还是超级读者.

除了打印节点之外,我无法做很多事情.我需要将其转换为用户名结构中的CSV文件; 角色

xml perl libxml2 xml-libxml

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

处理xml解析器错误

我有很多XML文件,我必须阅读它们,然后看看它们是否有效.我有一些文件与缺少endtag有问题.现在我的任务是编写一个读取这些文件的代码,只在有无效文件时打印错误消息和文件名,然后转到下一个文件.

我是Perl和XML的新手.但是,如果我知道如何处理有错误,那么我可以休息.我所知道的是,我在代码中有这样一行并读取XML文件,然后查找解析.如果不正常则会在命令行中产生错误.我的目标是有条件然后我会写一条消息.

 use strict;
 use warnings;
 use XML::LibXML;
 use XML::Simple;
 use XML::LibXML::XPathContext qw( );
 use XML::Writer;

 # reads all file
 my @testFile = <*.xml>;

 my $arrSize = @testFile;
 XML::LibXML::XPathContext->new()
 my $doc = XML::LibXML->load_xml(location => $ver);
 my $name_ver = $xml->findnodes('/Info/Name',$doc);
 ##  do some other things
Run Code Online (Sandbox Code Playgroud)

我希望这在某种程度上清楚我的意思.任何人都可以让我知道我怎么能写一个不允许代码停止的条件,而是去其他行并打印一条消息.

xml perl xml-libxml

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

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
查看次数

XML :: LibXML - XPath - 命名空间

有这样的XML文件 - t.xml

<?xml version="1.0"?>
<ArrayOfFiles xmlns="Our.Files" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <File>
                <DownloadCount>1</DownloadCount>
                <Id>11</Id>
        </File>
        <File>
                <DownloadCount>2</DownloadCount>
                <Id>22</Id>
        </File>
</ArrayOfFiles>
Run Code Online (Sandbox Code Playgroud)

xmlns声明是无效的,在xmlstarlet抱怨它,例如使用:

xmlstarlet sel -t -v "//File/Id" t.xml
Run Code Online (Sandbox Code Playgroud)

版画

t.xml:2.32: xmlns: URI Our.Files is not absolute
<ArrayOfFiles xmlns="Our.Files" xmlns:i="http://www.w3.org/2001/XMLSchema-instan
Run Code Online (Sandbox Code Playgroud)

可能出于同样的原因,我也无法使用以下perl代码:

use 5.014;
use warnings;
use XML::LibXML;

my $dom = XML::LibXML->new->parse_file('t.xml');
my $res = $dom->findnodes('//File/Id');
say $_->textContent for $res->get_nodelist;
Run Code Online (Sandbox Code Playgroud)

当我省略xmlns声明时,例如尝试解析这个修改过的XML文件

<?xml version="1.0"?>
<ArrayOfFiles>
    <File>
        <DownloadCount>1</DownloadCount>
        <Id>11</Id>
    </File>
    <File>
        <DownloadCount>2</DownloadCount>
        <Id>22</Id>
    </File>
</ArrayOfFiles>
Run Code Online (Sandbox Code Playgroud)

上面的代码DWIM - 并打印:

11
22
Run Code Online (Sandbox Code Playgroud)

问题是,如何解析原始XML文件,因为它是从外部站点下载的 …

perl libxml2 xml-libxml

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

XML::LibXML findnodes() 在 xmlns 存在时不返回结果

我正在使用 XML::LibXML::Reader 来解析一个大文档,但遇到了一个问题,即属性 xmlns 导致 findnodes() 失败。我通过添加正则表达式来删除 xmls 属性来修复它,但我想知道是否有更优雅的解决方案不涉及正则表达式。如果您删除正则表达式行 ($xml =~ s{xmlns...),您将看到“Loc = $loc”不会产生任何结果。

这是代码:

use strict;
use warnings;
use feature qw( say );
use XML::LibXML::Reader qw( XML_READER_TYPE_ELEMENT );

my $xml = <<'__EOI__';
<url xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <loc>http://example.com</loc>
    <lastmod>2018-10-19</lastmod>
</url>
__EOI__


$xml =~ s{xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"}{};

my $reader = XML::LibXML::Reader->new( string => $xml);
while ( $reader->read ) {
    next unless $reader->nodeType == XML_READER_TYPE_ELEMENT;
    next unless $reader->name eq 'url';
    my $xml = $reader->readOuterXml;
    my $doc = XML::LibXML->load_xml(string => $xml);
    say "Doc = $doc";
    my ($loc) …
Run Code Online (Sandbox Code Playgroud)

perl xml-libxml

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

Perl XML 使用 XML::LibXML 获取元素节点

我想替换我的 XML 文件的元素节点,但我什至没有成功获取节点。我下面的代码适用于其他子节点,但不适用于id节点。

这是我的 XML 文件:

<header>
    <idset id="100">                            
        <a>item_a</a>
        <b>item_b</b>
    </idset>
</header>
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use XML::LibXML;

my $file = 'test.xml';
my $parser = XML::LibXML->new();
my $doc = $parser->load_xml(location => $file);

my($object11) = $doc->findnodes('/header/idset');
say 'a: ',$object11->findvalue('./a');
say 'b: ',$object11->findvalue('./b');
say 'id: ',$object11->findvalue('./id');
Run Code Online (Sandbox Code Playgroud)

当前结果:

a: item_a
b: item_b
id:
Run Code Online (Sandbox Code Playgroud)

期待结果:

a: item_a
b: item_b
id: 100
Run Code Online (Sandbox Code Playgroud)

xml perl xml-libxml

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

Perl XML::LibXML 获取标签之外的数据

作为我上一个问题的后续问题(Perl XML::LibXML 从特定节点获取信息

给定以下 XML 数据,我无法弄清楚如何获取标记后显示的数据<tab/>(该标记没有结束标记,而不从该部分内的子节点获取所有数据?有关更多详细信息,请参阅下文:

XML 示例:

<title number="3">
<catchline>Uniform Agricultural Cooperative Association Act</catchline>
<chapter number="3-1">
<catchline>
General Provisions Relating to Agricultural Cooperative Associations
</catchline>
<section number="3-1-1">
<histories>
<history>
Amended by Chapter
<modchap sess="2010GS">378</modchap>
, 2010 General Session
</history>
<modyear>2010</modyear>
</histories>
<catchline>Declaration of policy.</catchline>
<tab/>
It is the declared policy of this state, as one means of improving the economic position of agriculture, to encourage the organization of producers of agricultural products into effective associations …
Run Code Online (Sandbox Code Playgroud)

xml perl xml-libxml

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

标签 统计

perl ×10

xml-libxml ×10

xml ×7

libxml2 ×2

activeperl ×1

css ×1

selector ×1

xml-parsing ×1

xpath ×1