小编Cra*_*igP的帖子

Perl XML :: LibXML:findnode vs. findvalue vs. find - 有什么区别?

我正在使用XML::LibXML,我只需要计算XPath表达式指定的节点数.

使用下面前两个代码行中的任何一个产生我正在寻找的东西.我可以使用或不使用countXPath函数(是的,我知道,因为它返回一个列表).findvaluefindfindnodes

my $node_cnt = $dom->findvalue("count($xpath_str)");  # WORKS!
my $node_cnt = $dom->find("count($xpath_str)");       # WORKS!
my @node_cnt = $dom->findnodes("count($xpath_str)");  # count doesn't work!
Run Code Online (Sandbox Code Playgroud)

这引出了一个普遍的唠叨问题:这三种find类型有什么区别?在文档中,它说:

$string = $node->findvalue($xpath)
$result = $node->find($xpath)
@nodes  = $node->findnodes($xpath_expression)
Run Code Online (Sandbox Code Playgroud)
  1. 论证$xpath_expression$xpath文档之间是否真的存在差异?

  2. 对于返回标量的两个人来说,有什么区别?

我试图理解使用一种查找类型的重要性 - 谢谢!

perl xpath libxml2

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

Perl XML :: LibXML:如何访问注释节点

对于我的生活,我无法找到正确的代码来访问我的XML文件中的注释行.难道我用findnodes,find,getElementByTagName(怀疑).

我是否正确地假设这些评论行是可访问的?我希望如此,因为我知道我可以添加评论.

注释节点的类型编号为8,因此它们必须是可解析的.

最终,我想要做的就是删除它们.

my @nodes = $dom->findnodes("//*");

foreach my $node (@nodes) {
  print $node->nodeType, "\n";
}

<TT>
 <A>xyz</A>
 <!-- my comment -->
</TT> 
Run Code Online (Sandbox Code Playgroud)

perl libxml2 xml-libxml

5
推荐指数
2
解决办法
1491
查看次数

XML removeChild,但out输出有一个空行

简单的removeChild测试,虽然删除了xml行,但它保持一个空的空行,怎么来的?顺便说一句 - 我的源xml文件确实有缩进,但即使我删除它们我得到相同的结果.那么,如果仍然保留一个空格,那么删除子行的意义何在?

有没有办法在将结果xml行输出到文件之前重新格式化?

foreach my $XYZ ($doc->findnodes("//EE1"))
{
 my $library = $XYZ->parentNode;
 $library->removeChild($XYZ);
} 
print {$FH} $doc->toString(0);



RESULT IN OUTPUT FILE:
<?xml version="1.0"?>
<TopTag>
  <AA1>ZNY</AA1>
  <AA2>111</AA2>
  <BB1>
    <CC1>ZNY</CC1>
    <CC2>
      <DD1>
                     <-----blank line remains
        <EE2>2000</EE2>
      </DD1>
      <DD1>
                     <-----blank line remains
        <EE2>5000</EE2>
      </DD1>
    </CC2>
  </BB1>
  <AA1>ZNY2</AA1>
  <AA2>2</AA2>
</TopTag>
Run Code Online (Sandbox Code Playgroud)

perl libxml2 xml-libxml

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

在HoH的第一级密钥上的Perl Data :: Dumper数字排序

我有一个HoH数据结构.外层哈希的键是数字的 - 所以我想转储由第一个哈希键数字排序的HoH(不关心内部哈希的顺序).我一直在尝试不同的Sortkeys潜艇......

use Data::Dumper;
#$Data::Dumper::Sortkeys = sub { [sort { $a <=> $b } (keys %{$_[0]})] };  ## A
 $Data::Dumper::Sortkeys = sub { [sort { $a <=> $b } keys %$_ ] };       ## B
print Dumper(\%dsCmdBlocks);
Run Code Online (Sandbox Code Playgroud)

我似乎无法在Sortkeys子例程中找到正确的语法,它将以数字方式转储由第一个键排序的HoH.当我尝试"A"时,它对第一个键进行排序很好,但它也吐出错误消息,说内部参数不是数字(这是由于使用了[0].所以"A"不是这是正确的方法.但我似乎无法在我的生活中弄清楚如何仅对第一个哈希进行排序.顺便说一下 - 当我通过一个正常的foreach循环发送HoH时:

foreach my $sk (sort {$a<=>$b} keys %dsCmdBlocks)
{
 print "KEY: $sk\n";
}
Run Code Online (Sandbox Code Playgroud)

它按预期工作.

那么如何将我的Sortkeys子设置为仅对第一个哈希键进行排序?

perl

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

LibXML - 插入评论

我正在使用XML :: LibXML,我想添加一个注释,使得注释不在标记之内.甚至可以把它放在标签之外?我试过appendChild,insertBefore | 之后,没有区别......

     <JJ>junk</JJ> <!--My comment Here!-->

     # Code excerpt from within a foreach loop:
     my $elem     = $dom->createElement("JJ");
     my $txt_node = $dom->createTextNode("junk");
     my $cmt      = $dom->createComment("My comment Here!");

     $elem->appendChild($txt_node);
     $b->appendChild($elem);
     $b->appendChild($frag);
     $elem->appendChild($cmt);

    # but it puts the comment between the tags ...
    <JJ>junk<!--My comment Here!--></JJ>
Run Code Online (Sandbox Code Playgroud)

perl libxml2 xml-libxml

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

标签 统计

perl ×5

libxml2 ×4

xml-libxml ×3

xpath ×1