【发布时间】:2017-08-04 06:13:15
【问题描述】:
我有如下字符串输入:
<Name>IncludeLeafPortfolios</Name><DataType>Boolean</DataType><Value>True</Value>
<Name>HierarchyDate</Name><DataType>Int</DataType><IsFixed>false</IsFixed>
<Name>HierarchyDate</Name><DataType>Int</DataType>
<Name>HierarchyDate</Name><DataType>Int</DataType><Value>0</Value><IsFixed>false</IsFixed>
<Name>HierarchyDate</Name><DataType>Int</DataType><Value>0</Value><IsFixed>false</IsFixed>
名称标签始终存在并且很有趣。 DataType 不感兴趣。 值标签和 IsFixed 标签可能存在也可能不存在。目标是捕获Value标签,如果其中一个存在或两者都存在,则IsFixed标签。
我的解决方案不起作用:
$element =~ m/^<Name>([\w\s]*)<\/Name>.*([<Value>[\w+\d+]<\/Value>]?)(<IsFixed>[\w+]<\/IsFixed>])?$
请提出建议。谢谢。
【问题讨论】:
-
您可以检查其中是否至少存在一个,但如果两者都存在,则只能捕获其中一个。 if($element =~ m'
.* |.* 'i){} 如果你在 .* 周围加上括号,你只会得到第一个的值如果由于快捷方式评估两个标签都存在,则为一个。 -
您确定这正是您的 XML 的外观吗?它看起来有点奇怪的结构。 (例如,我希望名称元素的“父”节点)。