提问人:kajoe14 提问时间:10/9/2022 最后编辑:Johny T Koshykajoe14 更新时间:10/9/2022 访问量:41
筛选复杂 XML 文档中的元素
Filtering elements from a complex XML document
问:
我有这个 XML - 目标是在给定某些条件下从 XML 中过滤某些属性:
所以,得到一个是阿隆索并且是前锋的球员SALARY
NAME
POSITION
<PLAYERS>
<PLAYER>
<NAME>ALONSO</NAME>
<POSITION>MIDFIELDER</POSITION>
<AGE>28</AGE>
<NATIONALITY></NATIONALITY>
<SALARY>550000</SALARY>
</PLAYER>
<PLAYER>
<NAME>MANE</NAME>
<POSITION>STRIKER</POSITION>
<AGE>30</AGE>
<NATIONALITY></NATIONALITY>
<SALARY>600000</SALARY>
</PLAYER>
<PLAYER>
<NAME>ALONSO</NAME>
<POSITION>STRIKER</POSITION>
<AGE>23</AGE>
<NATIONALITY>SPAIN</NATIONALITY>
<SALARY>250000</SALARY>
</PLAYER>
</PLAYERS>
这是我尝试的——
val salary = ("PLAYERS").flatMap {
case pNode if (pNode \\ "PLAYER" \\ "NAME").head.text == "ALONSO" =>
(pNode \\ "PLAYER" \\ "SALARY").headOption.map(_.text)
case _ => None
}.headOption
// result
salary
这似乎返回了 XML 中的第一笔薪水 - 这不是我需要的! 任何帮助将不胜感激!
答:
0赞
Johny T Koshy
10/9/2022
#1
在当前代码中,您正在检查 的第一个节点是否包含 .因此,如果您更改顺序并创建第一个玩家的名字,例如,您将得到一个空列表。Elem
"ALONSO"
"Rooney"
相反,您可以尝试,
players.child.flatMap {
case pNode if (pNode \\ "PLAYER" \\ "NAME").text == "ALONSO" =>
(pNode \\ "PLAYER" \\ "SALARY").headOption.map(_.text)
case _ => None
}
1赞
michael.hor257k
10/9/2022
#2
由于您将问题标记为 ,下面是一个 XSLT 答案:xslt
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/PLAYERS">
<xsl:value-of select="PLAYER[NAME='ALONSO' and POSITION='STRIKER']/SALARY"/>
</xsl:template>
</xsl:stylesheet>
评论
0赞
kajoe14
10/10/2022
希望有一个与 Scala 相关的解决方案 - 感谢您的输入!
评论