use*_*632 2 xml perl libxml2 xml-libxml
总菜鸟在这里,所以我很抱歉我提前无知.
我搜索和搞砸的大部分内容都集中在使用XML::LibXMLXPath.
我遇到的问题是我不想在标签之间捕获文本:我需要标签的值.
这是我的XML结构
<users>
<entry name="asd">
<permissions>
<role-based>
<superuser>yes</superuser>
</role-based>
</permissions>
</entry>
<entry name="fgh">
<permissions>
<role-based>
<superuser>yes</superuser>
</role-based>
</permissions>
<authentication-profile>RSA Two-Factor</authentication-profile>
</entry>
<entry name="jkl">
<permissions>
<role-based>
<superreader>yes</superreader>
</role-based>
</permissions>
<authentication-profile>RSA Two-Factor</authentication-profile>
</entry>
</users>
Run Code Online (Sandbox Code Playgroud)
我试图获取name属性(不带引号),并确定此人是超级用户还是超级读者.
除了打印节点之外,我无法做很多事情.我需要将其转换为用户名结构中的CSV文件; 角色
从XML文档中提取信息的最简单方法XML::LibXML是使用find一系列方法.这些方法使用XPath表达式从文档中选择节点和值.以下脚本提取您需要的数据:
use XML::LibXML;
my $doc = XML::LibXML->load_xml(location => 'so.xml');
for my $entry ($doc->findnodes('//entry')) {
my $name = $entry->getAttribute('name');
my $role = $entry->findvalue(
'local-name(permissions/role-based/*[.="yes"])'
);
print("$name;$role\n");
}
Run Code Online (Sandbox Code Playgroud)
它打印
asd;superuser
fgh;superuser
jkl;superreader
Run Code Online (Sandbox Code Playgroud)
我使用local-nameXPath函数获取角色元素的名称.
请注意,您可能希望使用Text::CSV更健壮的方式创建CSV文件.
| 归档时间: |
|
| 查看次数: |
669 次 |
| 最近记录: |