在 JAXB 或 Xstream 中,是否可以在解组期间过滤掉类型/值上的某些子元素

2024-04-29

希望大家都好,快速提问看看是否有人有任何反馈。

过去两天我正在尝试 JaxB 和 Xstream。我基本上使用 XML 库将 XML 编组到 Java 对象或从 Java 对象中解组。这是一项非常简单的任务,我很快就完成了。但是,我想要解组到 Java 对象列表中的 XML 非常长,并且包含许多可以忽略的子元素,并且不会将其放入 Java 对象列表中。 例如,xml 看起来类似于:

<?xml version="1.0" encoding="UTF-8"?>
<Tables>
    <Table1>
        <TYPE>Test1</TYPE>
        <DATE>2014-01-16</DATE>
        <FLAG>True</FLAG>
    </Table1>
    <Table1>
        <TYPE>Test2</TYPE>
        <DATE>2014-01-15</DATE>
        <FLAG>False</FLAG>
    </Table1>
    <Table1>
        <TYPE>Test1</TYPE>
        <DATE>2014-01-14</DATE>
        <FLAG>True</FLAG>
    </Table1>
</Tables>

因此,我希望库能够迭代所有 xml 元素并解组到迄今为止有效的 java 对象列表中,但是在迭代时,我想添加其他功能来检查 Type 和 Flag 元素值(如果 TYPE 值等于) Test2 和/或如果 Flag 值等于 False,则忽略此子元素,并且不将其包含在 Java 对象的完成列表中。有谁知道这对于 JaxB 或 Xstream 是否可行?或者,任何人都可以建议一种更好的方法来完成此任务,该方法需要最少的代码和手动解析。

我一直在研究 JaxB 中的 ValidationEventHandler 和 XmlAdapter,但我认为这些不允许我做我想做的事情。我与 Xmldapter 很接近,但是 unmarshal 必须为其处理的每个 xml 子元素返回 null 或一个对象,它还将 xml 语法更改为属性形式,即 TYPE = "Test1" 等,我没有看到任何改变的方法。

Xstream 允许您实现具有 canConvert 方法的转换器,但这仅适用于类类型,而不适用于我想要检查每个子元素的子元素类型。看看可以在 Xstream 中重载的 MapperWrapper wrapMapper 方法,但它只显示元素属性名称,即 FLAG 并且不显示值,而且如果它确实显示值,我也看不到告诉函数忽略子根元素以及该孩子的所有属性。

无论如何,这是我的两分钱。有什么建议吗?


如果您选择 EclipseLink MOXy 作为 JAXB 实现(而不是默认实现),则可以在 Java 类上使用注释来进行使用 XPath 表达式的解组。这可用于过滤掉某些输入。链接在这里:http://www.eclipse.org/eclipselink/moxy.php http://www.eclipse.org/eclipselink/moxy.php

或者,可能更简单的是,将 XML 转换 API 与样式表一起使用,该样式表具有过滤掉不需要的内容的模板。请检查班级javax.xml.bind.util.JAXBResult http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/util/JAXBResult.html,它允许您从一个源进行转换(例如InputStream or InputReader) 直接到 Java 对象。将其视为中间有变压器的解组。

编辑: 我将帮助您掌握基本的 XSLT 和一些代码。 这是可以执行您所描述的操作的样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*" />
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Table1[TYPE = 'Test1' or FLAG = 'True']">
        <!-- Don't do anything, since we want to filter these Table1 elements out -->
    </xsl:template>

</xsl:stylesheet>

以及可以作为基础的代码摘录:

//Obtain a TransformerFactory
//Obtain a Source for your stylesheet, like a StreamSource
Transformer transformer = transformerFactory.newTransformer(source);

//Next, create an Unmarshaller from a JAXBContext
Unmarshaller unmarshaller = context.createUnmarshaller();

//Create a JAXBResult with the Unmarshaller
JAXBResult result = new JAXBResult(unmarshaller);

//Obtain a Source for your input XML, and transform
transformer.transform(inputSource, result);

//Get the JAXBElement from the result
final JAXBElement<?> jaxbEl = (JAXBElement<?>)result.getResult();

//And now your unmarshalled Java bean from the JAXBElement
Object bean = jaxbEl.getValue();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JAXB 或 Xstream 中,是否可以在解组期间过滤掉类型/值上的某些子元素 的相关文章

  • 我们可以实例化一个抽象类吗?

    在一次采访中 有人问我 我们是否可以实例化一个抽象类 我的回答是 不 我们不能 但是 面试官告诉我 错了 我们可以 我对此争论了一下 然后他告诉我自己在家尝试一下 abstract class my public void mymethod
  • 为什么签名的 Android apk 无法在模拟器上运行

    我已经制作了一个android项目的签名apk 每当我的客户尝试在模拟器上运行它时 他都会遇到以下错误消息 D Android android sdk windows tools gt adb install r abc apk 500 K
  • Spring Security 中 Web 忽略和 Http 允许之间的区别?

    这两种方法有什么区别 Override protected void configure HttpSecurity http throws Exception http authorizeRequests antMatchers api p
  • Java如何从字符串实例化一个类[重复]

    这个问题在这里已经有答案了 可能的重复 在 Java 中从变量创建新类 https stackoverflow com questions 1268817 create new class from a variable in java 我
  • 搜索 JTable 时 - 未获得正确的 ID

    所以我尝试在搜索名称后单击表 然后在其他表中编辑它 问题是我没有获得正确的 ID 而只获得第一个 ID JTable https i stack imgur com TnNIq png 搜索行动 https i stack imgur co
  • Java 应用程序可以检测到调试器已连接吗?

    我知道 jvm 启动选项可以让 jvm 等待附加调试器 这不是我在这里的意思 是否有可能从 Java 代码中也检测调试器的附件 以便我可以例如编写一个正在执行某些操作的 脚本 然后在某个时刻让我的应用程序等待调试器 不会 这些选项是 JVM
  • Java 8 流排序字符串列表[重复]

    这个问题在这里已经有答案了 我正在流上调用排序方法 java 文档说 Sorted 方法返回一个由该流的元素组成的流 并根据自然顺序排序 但是当我运行下面的代码时 List
  • 如何仅使用命令行运行 Maven 创建的 jar 文件

    我需要一些帮助来尝试使用命令行运行以下 Maven 项目 https github com sarxos webcam capture https github com sarxos webcam capture webcam captur
  • 返回 Consumer 表达式内的 Method 值

    我试图在方法中返回一个布尔值 并且我正在使用消费者函数 有什么方法可以直接在 Consumer 表达式中返回该值吗 这是代码 private static boolean uuidExists UUID uuid MySQL getResu
  • Spring WebFlux:在 Spring Data MongoDB 反应存储库中的 null 值时发出异常?

    我正在尝试学习如何使用 MongoDB 反应存储库spring boot 2 0 0 M2 但我担心我没有按预期做事 这是我的方法之一 试图找到一个User通过他们的电子邮件 但如果没有 该方法应该抛出异常 Override public
  • Java - 在特定日期执行方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要在每年的特定日期执行一个方法 我该如何在java中执行此操作 Thanks Chris 按优先顺序排列 The Quartz htt
  • 使用 Arrays.copyOf 复制不同类型的数组时出现问题

    我正在尝试创建一个方法 该方法几乎将任何内容作为参数 并返回带有某些分隔符的值的串联字符串表示形式 public static String getConcatenated char delim Object names String st
  • 从流中过滤/删除无效的 xml 字符

    首先 我无法更改 xml 的输出 它是由第三方生成的 他们在 xml 中插入无效字符 我得到了 xml 字节流表示形式的 InputStream 除了将流消耗到字符串中并对其进行处理之外 是否有一种更干净的方法来过滤掉有问题的字符 我找到了
  • 更新 Maven 项目模块中的父版本

    我有一个奇怪的场景 我有一个项目 Y 它有一个模块 X 和一些其他模块 X 是项目 Y 的一部分 但它不作为该项目的模块链接 因此 每次发布 Y 的新版本时 都需要有人手动更新 X 中的父版本 我需要以这样的方式更新 Y 项目 a 每次发布
  • 使用 JavaFX 和 Maven 将模块描述符添加到库中[重复]

    这个问题在这里已经有答案了 我需要使用反思 https github com ronmamo reflections在一个带有 JavaFX 的 Maven 项目中 我想使用jlink捆绑一个最小的 JRE 问题是我运行时出现以下错误mvn
  • 在Android中创建自定义按钮类

    我正在尝试为我的 Android 应用程序创建自定义按钮类 public class TicTacButton extends Button 我已经在里面设置了所有构造函数TicTacButton并创建了自定义方法和属性 在我的主要活动中
  • JPanel 无法使用 setSize 和 setPreferedSize

    请解释为什么它不起作用 您也可以发布解决方案来解决此问题 非常感谢您提前 public class Run extends JFrame Fields static JPanel jpanel private int x y Constru
  • 请解释*贪婪量词的工作原理

    Pattern ptn Pattern compile a Matcher mtch ptn matcher bbaac if mtch find System out println mtch group 输出 不打印任何内容 Patte
  • Jsplitpane 自动调整大小

    我有一个 JSPlitPane 它们之间有 50 的分隔线 这工作正常 但是 当我在右侧添加一些 JLabels 时 jsplitpane 会忽略我的 50 分隔符 左侧窗格会增加其大小 并会挤压右侧窗格 为什么会发生这种情况以及如何解决
  • Struts2 中有多种结果类型?

    我有一个使用 Tiles 的 Struts2 应用程序 如何在操作映射中获取多种结果类型 因为我需要将de输出设置为JSON数据 并且同时Tiles 我努力了

随机推荐

  • 将事件绑定到尚未创建的 DOM 元素 (jquery)

    如何将事件绑定到脚本加载时不存在的 html 元素 我的脚本的一部分将这些添加到 DOM 中 a class btn remove item href link a 问题是我不能这样做 document ready function btn
  • 音乐播放器请求写入外部存储权限?

    我正在 Android 中创建一个音乐播放器应用程序 它工作正常 但每当我滚动歌曲列表时 它就会开始崩溃并给出此异常 Process com example lenovo musicplayer PID 31100 java lang Se
  • 如何将所有输入字段值更改为大写

    我有一组 PHP 字段 在将值发送到查询之前 我想将字母更改为大写 有没有办法做类似的事情 cust name john cust gender male lower upper conversion 那么现在 john 已更改为 JOHN
  • 流式音频播放延迟(约 200 毫秒)

    我有一个播放流式音频数据的应用程序 如聊天客户端 该工作流程涉及三个简单步骤 首先发送文件头信息 采样率 每个样本的位数和通道数 音频波形输出设备根据上述参数进行初始化 音频 pcm 数据被发送并在上述设备上播放 数据接收代码是本机的 C
  • ASP.Net webform生成Excel文件到本地PC而不是服务器

    继有关生成 Excel 文件的问题后 我需要能够在 Webform 应用程序位于远程 Web 服务器上时在本地创建文件 这不是我以前处理过的事情 所以我发现很难确切地问什么 我在 VS2010 上使用 C 的 WebForms 伊安德森 h
  • 如何减少Scala中创建的对象数量?

    我正在 Scala 中编写一个计算机图形应用程序 它使用 RGB 类返回图像中某个点的颜色 正如你可以想象的 返回颜色 RGB 对象的函数被调用了很多次 class RGB val red Int val green Int val blu
  • 如何TDD UIGestureRecognizers?

    在尝试使用 UIGestureRecognizer 编写 TDD 代码时 我发现无法以编程方式验证目标操作 如果没有这个 我不确定我是否可以正确测试它 如果手势识别器在 IB 中设置 支持 iOS 5 则目标动作会在 NIB Storybo
  • 无法在捆绑执行时安装 Locomotive CMS

    我正在尝试安装 LocomotiveCMS 并尝试遵循本指南 http doc locomotivecms com guides get started install engine http doc locomotivecms com g
  • Android 13 (SDK 33):Bundle.getSerialized(String) 已弃用,有什么替代方案?

    从 API 级别 33 开始getSerializable String Bundle 类的方法已弃用 文档建议使用getSerializable String Class 反而 但该功能仅适用于 API 级别 33 我当前的代码 val
  • Python 独有的 XML 规范化 (xml-exc-c14n)

    在 Python 中 我需要规范化 c14n XML 字符串 我可以使用哪个模块 包来实现此目的 我应该怎么做 我更喜欢使用默认的 python 2 7 模块 无需额外安装或补丁 参考见 http www w3 org TR xml exc
  • PHP 致命错误:未捕获错误:未找到“Facebook\WebDriver\ChromeOptions”类

    namespace Facebook WebDriver use Facebook WebDriver Remote DesiredCapabilities use Facebook WebDriver Remote RemoteWebDr
  • 二叉搜索树中序遍历

    我对这段代码感到困惑 void in order traversal iterative BinaryTree root stack
  • “class java.lang.String”中名为“tablename”的属性没有 getter

    我收到错误There is no getter for property named tablename in class java lang String 当我使用mybatis时 我的映射器 xml 是这样的
  • 如何使图像保留在 CSS 网格容器的行中?

    下面的代码显示了当我调整窗口大小时的预期行为 Chrome 60 和 Firefox 55 中 但 iOS Safari 10 3 中除外 这很可能是它在 Safari 中行为不当的另一个问题 html body width 100 hei
  • 没有 ProfilePage 索引,但我有 LoginAndSignupPage

    我有一个前两天突然出现的问题 我有一个 prestashop 模块 可以让我从 Instagram 页面检索图像 它运行得很好 但突然之间 什么都不起作用了 我有一个错误 ProfilePage 未定义的索引 我做了很多var dump 我
  • 从 URL 中删除文件扩展名

    我从未使用过 mod rewrite 但我想从网站的网址中删除所有文件扩展名 我需要遵循什么规则才能做到这一点 我已经尝试过这个 但是每次我单击网站上的链接时都会出现内部错误 RewriteRule 1 php L Options Mult
  • 使用 client_body_in_file_only 进行 nginx 文件上传

    晚上好 我需要将静态内容上传到 nginx 服务器 1 9 因此上传模块不适用于此版本 我读过这篇文章 Nginx 直接文件上传 无需通过后端传递 https coderwall com p swgfvw nginx direct file
  • WPF 动画第一次不运行

    我有一个窗口 其目的是在显示时淡入 第一次使用时 动画不会运行 在后续使用中 效果很好 这是一个请求者 我实例化它来显示一些东西 我不会保留它并重新使用实例 我实例化请求者 设置各种属性 例如 Top 和 Left 然后调用 ShowDia
  • MKMapview 将图钉放置在位置(长/纬度)

    我有纬度和长值 我需要能够在这个位置放置图钉 有人可以提供一些关于如何解决这个问题的建议吗 找到下面非常简单的解决方案 将引脚放置在由以下定义的给定位置CL位置坐标二维 http developer apple com library ma
  • 在 JAXB 或 Xstream 中,是否可以在解组期间过滤掉类型/值上的某些子元素

    希望大家都好 快速提问看看是否有人有任何反馈 过去两天我正在尝试 JaxB 和 Xstream 我基本上使用 XML 库将 XML 编组到 Java 对象或从 Java 对象中解组 这是一项非常简单的任务 我很快就完成了 但是 我想要解组到