我正在尝试解析以下 xml 输出并使用机器人框架获取标签的元素和子元素。我想获得一个特定的值,例如级别 2 的“邻接状态”。由于有多个相同的标签,我怎样才能实现这一点。
示例:
<isis-adjacency-information>
<isis-adjacency>
<interface-name>xe-0/0/2:0.0</interface-name>
<system-name>st-48s-p2-31</system-name>
<level>1</level>
<adjacency-state>Up</adjacency-state>
<holdtime>8</holdtime>
<snpa>88:e0:f3:1c:a0:7</snpa>
</isis-adjacency>
<isis-adjacency>
<interface-name>xe-0/0/2:0.0</interface-name>
<system-name>st-48s-p2-31</system-name>
<level>2</level>
<adjacency-state>Up</adjacency-state>
<holdtime>6</holdtime>
<snpa>88:e0:f3:1c:a0:7</snpa>
</isis-adjacency>
</isis-adjacency-information>
下面的代码获取第一个 xpath 匹配的值。但我需要2级以下的邻接状态。
${cmd0}= Execute Commands Executor @{target}[0] command=show isis adjacency format=xml xpath=//adjacency-state
欢迎任何建议/想法。 谢谢,
最佳答案
Elementtree 对谓词的支持有限。因此,您可以迭代元素,寻找合适的元素,而不是使用复杂的 XPath。这是一个就测试日志而言有点嘈杂的解决方案,但确实有效:
${xml} Parse Xml /path/to/example.xml
@{adjacencies} Get Elements ${xml} isis-adjacency
${state} Set Variable NOT FOUND
:FOR ${adjacency} IN @{adjacencies}
\ ${level} Get Element Text ${adjacency} level
\ ${state} Set Variable If '${level}'=='2' ${level} ${state}
\ Exit For Loop If '${level}'=='2'
Should Not Be Equal ${state} NOT FOUND Did not find state for adjacency of level 2
Log State is ${state}
关于xml - 如何解析xml输出并获取机器人框架中特定标签下的元素/子元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38339348/