【问题标题】:How to filter XML using FilterFunction in Java 8如何在 Java 8 中使用 FilterFunction 过滤 XML
【发布时间】:2023-03-28 20:57:01
【问题描述】:

我需要使用 FilterFuction 过滤一个 XML 文件。我只想显示“计数> 63”的记录。我用火花。现在我的代码只显示带有字母 a 的行数。可能我应该使用 List,但我不知道如何在 Java 8 中使用它来过滤 XML 文件。因此,我想获得一个 TagName 列表(“control”、“arduino”,Count>63)。

现在我的代码只显示“带 a 的行”的数量。但我想获得一个 Count>63 的 TagName 列表。它将是:“control, arduino, raspberry-pi, motion-planning” 也许我应该使用拆分。

这是我的 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<tags>
<row Id="1" TagName="soccer" Count="7" ExcerptPostId="12371" WikiPostId="12370" />
<row Id="2" TagName="servos" Count="63" ExcerptPostId="186" WikiPostId="185" />
<row Id="3" TagName="control" Count="394" ExcerptPostId="192" WikiPostId="191" />
<row Id="5" TagName="gait" Count="4" ExcerptPostId="12362" WikiPostId="12361" />
<row Id="6" TagName="walk" Count="7" />
<row Id="8" TagName="arduino" Count="401" ExcerptPostId="202" WikiPostId="201" />
<row Id="9" TagName="raspberry-pi" Count="151" ExcerptPostId="307" WikiPostId="306" />
<row Id="10" TagName="motion-planning" Count="104" ExcerptPostId="11370" WikiPostId="11369" />
</tags>

这是我的 Java 代码:

import org.apache.spark.api.java.function.FilterFunction;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.Dataset;

public class Main {
public static void main(String[] args) {
    String someFile = "/home/files/Tags.xml";

    SparkSession spark = SparkSession.builder().appName("Simple app").getOrCreate();

    Dataset<String> logData = spark.read().textFile(someFile).cache();

    ong numAs = logData.filter((FilterFunction<String>) s -> s.contains("a")).count();

    System.out.println("Lines with a: " + numAs);

    spark.stop();
}
}

提前谢谢你

【问题讨论】:

  • 更详细地描述您的期望、您目前获得的结果以及您想要获得的结果是什么?此外,请标记您正在使用的库。你说的是火花吗?
  • 对不起,我编辑了我的帖子并标记了 Spark 的库。现在我的代码只显示“带a”的数量。但我想获得一个 Count>63 的 TagName 列表。它将是:“控制、arduino、树莓派、运动规划”
  • @Aominè 也许我应该使用拆分

标签: java xml filter java-8


【解决方案1】:

我的印象是,您试图通过将 XML 视为一系列行来处理 XML,并在换行符边界上拆分它。您不能以这种方式解析 XML - 行尾没有特别的意义。 (您谈论“记录”和“行”,但在 XML 世界中这些都是无意义的概念:您需要考虑元素和属性。)快速浏览一下 Spark,我看不到任何 XML 处理能力。所以在我看来,你好像在使用错误的工具来完成这项工作。

【讨论】:

  • 谢谢您的回答,也许这是错误的,但我真的很想“通过将 XML 视为一系列行来处理它”,我知道我可以使用拆分来做到这一点,但我没有不知道怎么做。你能帮我吗?
  • 不,我做梦也想不到帮助任何人做如此糟糕的事情。我在 StackOverflow 上看到太多人因为没有正确解析 XML 而陷入了可怕的混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 2016-06-12
  • 2016-07-01
  • 2014-04-25
相关资源
最近更新 更多