小编mir*_*rod的帖子

注释可以用于代码注入吗?

我意识到这可能是一个被问及回答的问题,但请耐心等待.

我想知道是否可以使用注释将代码注入到类编译时.经典的例子是为对象的成员生成一个getter和setter.这不是我所需要的,但它有助于说明基本思想.

现在在互联网上我得到的基本答案是否定的,但这个人做到了:

链接文字

有谁知道他是怎么做的(如果他真的做了他说的话)?

主要的是他没有使用注释处理器来生成要编译的新java文件.我所知道的这种技术并不适用于我们的目的.

谢谢

java annotations

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

如何为ActivePerl安装XML :: LibXML?

我是Perl的新手,我正在使用ActivePerl.我收到以下错误:

无法在@INC中找到XML/LibXML.pm ...

我已经尝试了一切,但无法找到为XML :: LibXML安装"正确"模块的步骤.

这正是发生了什么.我从命令提示符运行脚本:

c:\ temp> perl myscript.pl

myscript.pl的前几行:

#!/usr/bin/perl

use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
use HTTP::Date;
use XML::Parser;
use LWP::UserAgent;
use XML::LibXML;
use Archive::Extract;
use Encode;
use LWP::Simple;

require HTTP::Request;
...
Run Code Online (Sandbox Code Playgroud)

然后我收到这个错误:

c:\ temp> perl myscript.pl无法在myscript.pl第7行的@INC(@INC包含:C:/ Perl/site/lib C:/ Perl/lib.)中找到XML/LibXML.pm.BEGIN失败 - 汇编在myscript.pl第7行中止

perl activeperl xml-libxml

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

如何从Perl中的XML :: LibXML访问属性和元素?

我无法在Perl中使用XML :: LibXML包理解/使用名称空间.我可以成功访问元素但不能访问属性.我有以下代码访问XML文件(http://pastebin.com/f3fb9d1d0).

my $tree = $parser->parse_file($file); # parses the file contents into the new libXML object.
my $xpc = XML::LibXML::XPathContext->new($tree); 
$xpc->registerNs(microplateML => 'http://moleculardevices.com/microplateML');   
Run Code Online (Sandbox Code Playgroud)

然后我尝试访问一个名为common-name的元素和一个名为name的属性.

foreach my $camelid ($xpc->findnodes('//microplateML:species')) {
  my $latin_name = $camelid->findvalue('@name');   
  my $common_name = $camelid->findvalue('common-name');  
  print "$latin_name, $common_name" ;
}
Run Code Online (Sandbox Code Playgroud)

但只有latin-name(@name)打印出来,通用名称不是.我做错了什么,如何才能打印出通用名称?

@name在这种情况下做了什么?我认为它是一个数组,并且属性应该放在一个数组中,因为可以有多个,但是元素(如common-name)不应该是因为应该只有一个?

我一直在关注这里的例子:http ://www.xml.com/pub/a/2001/11/14/xml-libxml.html和这里:http://perl-xml.sourceforge.net/faq /#namespaces_xpath,并试图让他们的示例camel脚本使用我的命名空间,因此奇怪的命名空间.

perl xpath namespaces libxml2 xml-libxml

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

如何使用XML :: Twig的处理程序传递参数并返回值?

我的问题是:如何将一些参数传递给XML:Twig的处理程序,以及如何从处理程序返回结果.

这是我的代码,硬编码:

<counter name = "music", report type = "month", stringSet index = 4>.

如何通过使用参数来实现这个$counter_name,$type,$id?以及如何返回string_list的结果?谢谢(抱歉,我没有在这里发布xml文件,因为我有一些麻烦.<和>中的任何内容都被忽略).

use XML::Twig;

sub parse_a_counter {

     my ($twig, $counter) = @_;
     my @report = $counter->children('report[@type="month"]');

     for my $report (@report){

         my @stringSet = $report->children('stringSet[@index=”4”]');
         for my $stringSet (@stringSet){

             my @string_list = $stringSet->children_text('string');
             print @string_list;  #  in fact I want to return this string_list,
                                  #  not just print it.
         }
     }

     $counter->flush; # free the memory of $counter
}

my $roots …
Run Code Online (Sandbox Code Playgroud)

perl xml-twig

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

在XML中:TWIG,一旦找到感兴趣的元素,如何停止解析

我只想解析一个感兴趣的xml元素(例如见下面:类名称等于数学的类元素),我想在解析遇到这个条件的第一个元素时停止.(因为只有一个名为math的类,所以一旦找到元素就没有必要继续).

但是,如果我按如下方式实现,代码在找到我感兴趣的元素之后继续读取整个文件(xml文件很长,因此需要很长时间).我的问题是如果解析了name = math的第一个类元素后如何停止它?

my $twig = new XML::Twig(TwigRoots => {"class[\@name='math']" => \&class}); $twig->parsefile( shift @ARGV );

此外,我还希望在解析之后从xml文件(不仅是内存)中删除此类,以便下次解析具有其他名称的类时,不会解析类元素.有可能吗?

perl xml-twig

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

如何更改XML以使用空元素标签?

我是XML :: Twig的新手.如何更改所有空元素以使用空元素标记(<foo/>)而不是开始标记和结束标记组合(<foo></foo>)?

输入:

<book>
    <given-names>Maurice<xref ref-type="fn" rid="fnI_1"></xref></given-names>
    <colspec colname="col1" colnum="1"></colspec>
    <entry align="left"><p></p></entry>
</book>
Run Code Online (Sandbox Code Playgroud)

我需要输出为:

<book>
    <given-names>Maurice<xref ref-type="fn" rid="fnI_1"/></given-names>
    <colspec colname="col1" colnum="1"/>
    <entry align="left"><p/></entry>
</book>
Run Code Online (Sandbox Code Playgroud)

我试过了:

       use XML::Twig;
       my $xml = XML::Twig->new(twig_handlers => {
                                  'xref' => sub {$_->set_tag('#EMPTY'),},
                                },
                                pretty_print => 'indented',                                        
                               );
       $xml->parse('sample.xml');
       $xml->print;
}
Run Code Online (Sandbox Code Playgroud)

但我无法处理它.如何在没有内容标签的情况下全面改变空标签?我该怎么改变?

xml tags perl xml-twig

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

如何通过编程方式通过XML :: Twig添加实体声明?

对于我的生活,我无法理解实体处理的XML :: Twig文档.

我有一些用HTML :: Tidy生成的XML.电话如下:

my $tidy = HTML::Tidy->new({
    'indent'          => 1,
    'break-before-br' => 1,
    'output-xhtml'    => 0,
    'output-xml'      => 1,
    'char-encoding'   => 'raw',
});

$str = "foo &nbsp; bar";
$xml = $tidy->clean("<xml>$str</xml>");
Run Code Online (Sandbox Code Playgroud)

产生:

<html>
  <head>
    <meta content="tidyp for Linux (v1.02), see www.w3.org" name="generator" />
    <title></title>
  </head>
  <body>foo &nbsp; bar</body>
</html>
Run Code Online (Sandbox Code Playgroud)

XML :: Twig(可以理解)barf &nbsp;.我想做一些转换,通过XML :: Twig运行它:

my $twig = XML::Twig->new(
  twig_handlers => {... handlers ...}
);

$twig->parse($xml);
Run Code Online (Sandbox Code Playgroud)

$twig->parse行barfs的&nbsp;,但我无法弄清楚如何添加&nbsp;元素编程.我尝试过这样的事情:

my …
Run Code Online (Sandbox Code Playgroud)

xml perl xml-twig xml-entities

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

使用XML :: TWIG进行大型xml文件解析失败

我正在尝试使用XML :: Twig解析一个大的xml文件(大约100,000条记录),但perl解析失败并出现错误:

perl.exe - Application Error: 
The instruction at "0x28086920" referenced memory at "0x00000004". The memory could not be "written"...
Run Code Online (Sandbox Code Playgroud)

我读过,XML::Twig解析大型xml文件没有任何问题,但在我的情况下它失败了上述错误.

我的.pl文件有一个forloop代码,可以旋转100,000次,如下所示:

foreach my $d1(@detailData)   {
    if ($d1->first_child('a')->getElementsByTagName('b')) {
        $id= $d1->first_child('a')->first_child('x')->field('b');
    }
    ....
    .....
    ......

}
Run Code Online (Sandbox Code Playgroud)

在forloop里面我有大约20个如果循环如上.它是否导致内存问题?

任何人都可以建议我如何克服这些记忆问题?

perl xml-twig

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

XML :: Twig keep_encoding如何工作?

在几年前,我发现了一些Perl online,它在单行时整齐地格式化了有效的XML(标签和换行符).代码如下.

它使用XML :: Twig来做到这一点.它创建XML ::嫩枝对象而不 keep_encoding( $twig = XML::Twig->new()),但如果我给它在它的非ASCII字符UTF-8编码的XML文件时,它产生一个文件,该文件是不是有效根据isutf8命令上UTF-8 Ubuntu Linux系统.在xxd中打开文件,我可以看到字符从2字节变为1.

如果我使用我$twig= XML::Twig->new(keep_encoding=>1);的相同输入产生有效的UTF-8并保留两个字节.

根据Perldoc的keep_encoding

这是一个(稍微?)邪恶的选项:如果XML文档不是UTF-8编码并且你想保持这种方式,那么设置keep_encoding将使用Expat original_string方法作为字符,从而保持原始编码,以及字符串中的原始实体.

为什么在没有该选项的情况下生成非UTF-8文档,为什么设置它会导致保留UTF-8-ness?

顺便说一下,非ASCII字符是一个不间断的空格(c2 a0).

use strict;
use warnings;
use XML::Twig;
my  $sXML  = join "", (<>);
my  $params = [qw(none nsgmls nice indented record record_c)];
my  $sPrettyFormat  = $params->[3] || 'none';
my $twig = XML::Twig->new();
$twig->set_indent(" "x4);
$twig->parse( $sXML );
$twig->set_pretty_print( $sPrettyFormat );
$sXML      = $twig->sprint;
print $xXML;
Run Code Online (Sandbox Code Playgroud)

perl utf-8 xml-twig

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

如何使用XML :: LibXML使用SAX解析XML?

到目前为止,我发现的唯一示例代码已经很久了,它将不再起作用(使用已弃用的类).我所需要的只是一些基本的东西:

  1. 从文件加载和解析XML

  2. 定义SAX事件处理程序

  3. 读取传递给事件处理程序的元素的属性或文本值

xml perl sax xml-libxml

3
推荐指数
2
解决办法
2821
查看次数