我正在尝试使用org.simpleframework.xml.用于处理Android项目中的xml数据的类.我无法理解如何构建我的类"Point"构造函数以匹配xml定义:在运行时我得到此异常:
org.simpleframework.xml.core.PersistenceException: Constructor not matched for class koine.marcos.wifidemo.Point
Run Code Online (Sandbox Code Playgroud)
我的xml数据是这样的:
文件points.xml:
<?xml version="1.0" encoding="utf-8"?>
<points>
<point id="La Gioconda">
<rssi ssid="beacon1" bssid="00:21:91:d1:36:62">-52</rssi>
<rssi ssid="beacon2" bssid="00:12:a9:03:23:32">-97</rssi>
</point>
<point id="La Pietà">
<rssi ssid="beacon1" bssid="00:21:91:d1:36:62">-68</rssi>
<rssi ssid="beacon2" bssid="00:12:a9:03:23:32">-83</rssi>
</point>
</points>
Run Code Online (Sandbox Code Playgroud)
文件Rssi.java:
@Root
public class Rssi {
@Attribute(required=false)
protected String id;
@Element(required=false)
protected Integer value;
... getters and setters ...
}
Run Code Online (Sandbox Code Playgroud)
文件point.java:
@Root
public class Point {
@Attribute
protected String id;
@ElementMap(entry="rssi", key="id", attribute=false,
inline=true, required=false)
private Map<String,Integer> rssiMap;
public Point(String id, Map<String,Integer>rssi) { …Run Code Online (Sandbox Code Playgroud) 我想知道你是否可以对我已经做了几天的代码有所了解.
我一直在尝试使用XMLout()和XMLin()方法将Perl解析的哈希转换回XML,并且使用这种格式非常成功.
#!/usr/bin/perl -w
use strict;
# use module
use IO::File;
use XML::Simple;
use XML::Dumper;
use Data::Dumper;
my $dump = new XML::Dumper;
my ( $data, $VAR1 );
Topology:$VAR1 = {
'device' => {
'FOC1047Z2SZ' => {
'ChassisID' => '2009-09',
'Error' => undef,
'Group' => {
'ID' => 'A1',
'Type' => 'Base'
},
'Model' => 'CATALYST',
'Name' => 'CISCO-SW1',
'Neighbor' => {},
'ProbedIP' => 'TEST',
'isDerived' => 0
}
},
'issues' => [
'TEST'
]
};
# create object
my $xml …Run Code Online (Sandbox Code Playgroud) 我正在使用XML :: Simple,我在变量$ xmldata中有以下XML结构,我需要通过Perl代码访问它.
<root>
<a>sfghs</a>
<b>agaga</b>
<c>
<c1>sgsfs</c1>
<c2>sgsrsh</c2>
</c>
<d>
<d1>agaga</d1>
<d2>asgsg</d2>
</d>
</root>
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码访问a和b的值:
$aval = $xmldata->{a}[0];
$bval = $xmldata->{b}[0] ;
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是:如何获得say,d2的值?
我只想找到在XML :: Simple中禁用排序操作的方法
例如:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
my %my_xml = (
NAME => [ 'test' ],
EMAIL => [ 'test@example.com' ],
ID => 12,
);
my $xs = XML::Simple->new;
print $xs->XMLout(\%my_xml, RootName => "datas", NoSort => 1);
__END__
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
<datas ID="12">
<EMAIL>test@example.com</EMAIL>
<NAME>test</NAME>
</datas>
Run Code Online (Sandbox Code Playgroud)
但我希望输出为:
<datas ID="12">
<NAME>test</NAME>
<EMAIL>test@example.com</EMAIL>
</datas>
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我使用以下脚本:
#!/usr/local/bin/perl -wT
use strict;
use warnings;
print "Content-type: text/html\n\n";
print "xml reader";
# use module
use XML::Simple;
use Data::Dumper;
#print Dumper (XML::Simple->new()->XMLin());
Run Code Online (Sandbox Code Playgroud)
它将在我的xml文件中读取,名为xml.xml
如果我现在将xml文件移出我的cgi-bin,请更改其名称并使用以下命令引用它:
#print Dumper (XML::Simple->new()->XMLin("../resource.xml"));
Run Code Online (Sandbox Code Playgroud)
它仍然有效.
如果我现在尝试使用url而不是脚本不返回任何内容:
print Dumper (XML::Simple->new()->XMLin("http://digitalessence.net/resource.xml"));
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用和不使用http://,没有www和各种不同的方法,但它不会返回任何内容.
我在这里做过傻事还是不加载远程网址?
谢谢.
我在Perl中解析xml文件,一切似乎都很好用一个问题.我有相同模式的文件,但它们从解析器返回不同类型的数据.这是一个简化的例子:
<tests>
<test>
<data1>Hi</data1>
<data2>Hello</data2>
</test>
<test>
<data1>Hi2</data1>
<data2>Hello2</data2>
</test>
</tests>
Run Code Online (Sandbox Code Playgroud)
在转储中,这将返回以下内容:(注意test是两个哈希的数组)
$VAR1 = {
'test' => [
{
'data2' => 'Hello',
'data1' => 'Hi'
},
{
'data2' => 'Hello2',
'data1' => 'Hi2'
}
]
};
Run Code Online (Sandbox Code Playgroud)
现在,对于一组类似的数据,但只有一个"测试"实体,如下所示:
<tests>
<test>
<data1>Hi</data1>
<data2>Hello</data2>
</test>
</tests>
Run Code Online (Sandbox Code Playgroud)
这返回类似的数据,EXCEPT测试实体不再是一个数组,而是一个单数哈希:
$VAR1 = {
'test' => {
'data2' => 'Hello',
'data1' => 'Hi'
}
};
Run Code Online (Sandbox Code Playgroud)
我的困境是我的代码需要一个数组,因为这是常态.但是,当只有一个实体的机会很小时,它将返回该实体的哈希值.我的问题是,我如何处理哈希实体,就好像它是一个数组.还是测试一下?
现在我检索数组的代码是这样的:
foreach $test (@{$data->{'tests'}->{'test'}})
{
do something with $test
}
Run Code Online (Sandbox Code Playgroud)
但是使用散列,它会给出错误"Not a ARRAY reference".我希望这是足够的细节!谢谢!!!
我正在努力使用Perl中的哈希声明:
my %xmlStructure = {
hostname => $dbHost,
username => $dbUsername,
password => $dbPassword,
dev_table => $dbTable,
octopus => {
alert_dir => $alert_dir,
broadcast_id => $broadcast_id,
system_id => $system_id,
subkey => $subkey
}
};
Run Code Online (Sandbox Code Playgroud)
我一直在谷歌搜索,但我无法提出解决方案,我所做的每一个修改都会在另一个警告或我不想要的结果中结束.
Perl投诉与以下文字:
Reference found where even-sized list expected at ./configurator.pl line X.
Run Code Online (Sandbox Code Playgroud)
我这样做,因为我想使用该模块:
XML::Simple
Run Code Online (Sandbox Code Playgroud)
为了生成具有以下结构的XML文件:
<settings>
<username></username>
<password></password>
<database></database>
<hostname></hostname>
<dev_table></dev_table>
<octopus>
<alert_dir></alert_dir>
<broadcast_id></broadcast_id>
<subkey></subkey>
</octopus>
</settings>
Run Code Online (Sandbox Code Playgroud)
所以有点像:
my $data = $xmlFile->XMLout(%xmlStructure);
warn Dumper($data);
Run Code Online (Sandbox Code Playgroud)
将显示后一个xml样本结构.
更新:
我忘了提到我也尝试使用括号而不是花括号作为哈希引用,虽然它似乎工作,但XML文件编写不正确:我最终得到以下结构:
<settings>
<dev_table>5L3IQWmNOw==</dev_table>
<hostname>gQMgO3/hvMjc</hostname>
<octopus>
<alert_dir>l</alert_dir>
<broadcast_id>l</broadcast_id>
<subkey>l</subkey>
<system_id>l</system_id>
</octopus> …Run Code Online (Sandbox Code Playgroud) 我有一个用Perl编写的SOAP客户端,使用LWP包进行HTTPS传输和XML::Simple解析XML有效负载.有时候调用会XMLin因为die()而失败,然后我的脚本就会死掉,并且必须由我编写的监控程序重新启动以检测这一点.这真的不可取,所以我想知道Perl是否有任何像C++异常处理机制的设施,我可以捕获骰子消息,忽略它报告错误并让我的脚本继续就像发生错误一样?我已经阅读了许多Perl书籍并寻找了这个,但我还没有找到一些东西.这是杀死我的应用程序,但我不想编写自己的XML解析代码,除非我绝对必须.
我正在编写一个子程序,使用该XML::Simple模块从配置文件中提取信息.
XML文件具有以下结构
<main>
<server hostname="blahblah" ... more_attributes="more"/>
<server etc./>
<server etc./>
</main>
Run Code Online (Sandbox Code Playgroud)
代码工作正常.它将XML数据按预期放入嵌套哈希中.但是,当我想使用当前系统将一台服务器与其他服务器隔离时,我hostname遇到了问题.
我想这一行
my %systemHash = %{$xmlObject->{SERVER}->{`hostname`}};
Run Code Online (Sandbox Code Playgroud)
应将当前计算机的主机名插入最后一组括号中.但是当执行我得到的代码时
Can't use an undefined value as a HASH reference
Run Code Online (Sandbox Code Playgroud) 使用时XML::Simple,我总是会收到警告
could not find ParserDetails.ini in /usr/lib/perl5/vendor_perl/5.8.8/XML/SAX
Run Code Online (Sandbox Code Playgroud)
我想做类似的事情
{
no warning qw(insert_your_magic_here);
my $hash_ref = XMLin('my_file.xml')
}
Run Code Online (Sandbox Code Playgroud)
我用红色的perldoc来警告http://perldoc.perl.org/warnings.html,并找到了“ Cathegory hiearchy”,但我不知道此警告属于哪个类别。
你知道吗?
您可能知道那些ParserDetail打算做什么?