我使用perl转换XML文件JSON。我能够编写用于将输入XML文件转换为Json格式的代码。
以下是示例xml:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Person SchemaVersion="1.0.8">
<ID>0</ID>
<Home ID="ABC-XYZ" State="Unknown">
<Location>
<SiteName></SiteName>
<Number>62</Number>
<MaxSize>0</MaxSize>
<Comment></Comment>
</Location>
<Laptop>
<FileName>/usr/temp/RPM_020515_.tar.gz</FileName>
</Laptop>
</Home>
</Person>
示例执行json转换的perl代码:
#!/usr/bin/perl
use JSON;
use XML::Simple;
# Create the object of XML Simple
my $xmlSimple = new XML::Simple(KeepRoot => 1);
# Load the xml file in object
my $dataXML = $xmlSimple->XMLin("input/path/to/above/XMLFILE");
# use encode json function to convert xml object in json.
my $jsonString = encode_json($dataXML);
# finally print json
print $jsonString;
输出JSON值:
{
"Person": {
"ID": "0",
"SchemaVersion": "1.0.8",
"Home": {
"ID": "ABC-XYZ",
"Laptop": {
"FileName": "/usr/temp/RPM_020515_.tar.gz"
},
"Location": {
"Number": "62",
"MaxSize": "0",
"Comment": { },
"SiteName": { }
},
"State": "Unknown"
}
}
}
以上代码工作正常。
我的问题是,这就是我实际上被困住的地方。
我需要再做一件JSON转换,即检查XML中的元素“FileName”是否为空。如果它也没有提取它的价值。
So output will be two things:
1. XML To JSON convert ( working fine )
2. Along with point 1. extract the value of nested element in XML
"FileName". I need that for some business logic need in next step.
有些perl专家可以帮助我,并建议我如何在我目前的perl代码中做到这一点。
感谢您提前帮助。 这是我的第一个perl脚本,所以请原谅我这是一个太微不足道的问题。
尝试阅读perl文档,但没有那么有用。
注意:我试图只使用内置库中的perl而不是任何新的第三方库,这就是我使用XML :: Simple的原因。它的生产代码限制(非常糟糕的限制)。我希望XML :: Simple或JSON中存在这样的东西。
答案 0 :(得分:1)
正如XML::Simple文档所指出的那样,它会悄悄地淹没&#39;将XML转换为类似于输入XML的数据结构。因此,要弄清楚XML的内容,只需将其视为可能的哈希引用:
if ($dataXML->{Person}{Home}{ID} eq 'foo') {
# Some action
...
}
答案 1 :(得分:1)
您应该使用XML::LibXML而不是XML :: Simple。然后使用xpath查询每个文档。我要看一下XML::XML2JSON的代码,看看它是否适合这个问题......