输入
<Groups>
<Group>
<Service name="A" enable="0"/>
<Service name="B" enable="1"/>
<NodeSet>
<Node ip="abd"/>
</NodeSet>
</Group>
<Group>
<Service name="E" enable="0"/>
<Service name="F" enable="1"/>
<NodeSet>
<Node ip="mno"/>
</NodeSet>
</Group>
</Groups>
我提供了一个非常简化的XML文件版本,我们正在使用它。
问题
我想要一个与给定IP匹配的服务列表。因此,在这种情况下,我希望获得IP A
的服务B
和abd
。
我知道XPath,这将帮助我识别IP(如果存在)。但是,一旦找到IP(存在),我将无法找到服务名称。能否指导我找一个可以帮助我的好消息来源。
答案 0 :(得分:1)
您实际所需的是Group
节点,它们下面有指定的ip。首先获取它们,然后您可以遍历它们以从它们下面获取Service
名称。在将XML解析为内存后,使用基本列表操作迭代和解析XML树非常简单:
val xml = XML.loadFile("file")
val matchingGroups = (xml \\ "Group").filter(n => (n \ "NodeSet" \ "Node" \ "@ip").text == "abd")
val serviceNames = matchingGroups.flatMap(n => n \ "Service").map(n => (n \ "@name").text)
根据确切的XML模式,可能需要进行一些修订 - 属性遍历仅适用于单个节点而非序列。