【发布时间】:2015-04-11 03:55:24
【问题描述】:
我正在使用 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 中存在这方面的内容。
【问题讨论】:
-
您可能想阅读this article 了解如何使用 XML::Simple。让我担心您的代码的一件事是是否有任何可以重复的 XML 元素?例如,
<Home>是否可以有多个<Laptop>? -
不要使用 XML::Simple。它不是。它适用于简单的 XML。改用 XML::Twig 之类的方法。
-
回复。 “我试图只使用 perl 内置库而不是任何新的第三方库,这就是我使用 XML::Simple 的原因。”
XML::Simple不是核心模块......还有什么其他非- 贵公司认为可以接受的核心模块吗? -
@GrantMcLean:是的,XML 可能有重复的元素,你认为代码无法处理这种情况吗?
-
是的,您没有使用我链接的文章中推荐的 ForceArray 或 KeyAttr 选项,这意味着当元素重复时,数据结构的形状会发生显着变化。 Read the article :-)
标签: regex xml json perl xml-parsing