xml - 如何解析xml输出并获取机器人框架中特定标签下的元素/子元素的值

标签 xml robotframework

我正在尝试解析以下 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/

相关文章:

java - xsd 架构文件 - 显示 elementName 已定义

python - 在机器人框架中调用用户定义的测试库函数(带参数)时出现类型错误

robotframework - 为什么空白在测试脚本中很重要?

robotframework - 如何为机器人框架中的嵌套变量创建新值/分配新值?

python - 机器人框架 - "No keyword with name ' 运行进程'被发现”,同时包含进程库

java - 通过 javax.xml 更改日期格式输出

xml - 如何根据内容选择 XML 节点?

android - 我们可以使用 VectorDrawable 或 VectorXML 作为 android 中推送通知的图标吗?

robotframework - 如何使用命令机器人框架执行bat文件(.bat)?

java - 读取条件年龄 >30 的 XML 文件并在 Java 控制台中输出