JAXB 解组未知 XML 内容的子集

2024-03-11

我有一个要求unmarshall未知的子集XML内容,对于该未编组的对象,我需要修改一些内容并将相同的 XML 内容(子集)与原始 XML 重新绑定。

输入 XML 示例:

<Message>
    <x>
    </x>
    <y>
    </y>
    <z>
    </z>
    <!-- Need to unmarshall this content to "Content" - java Object -->
    <Content>
        <Name>Robin</Name>
        <Role>SM</Role>
        <Status>Active</Status>
    </Content>
.....
</Message>

需要解组<Content>单独标记,保持其他 XML 部分相同。需要修改里面的元素<Content>标记并将修改后的 XML 部分与原始 XML 部分绑定,如下所示:

预期输出 XML:

<Message>
    <x>
    </x>
    <y>
    </y>
    <z>
    </z>
    <!-- Need to unmarshall this content to "Content" - java Object -->
    <Content>
        <Name>Robin_123</Name>
        <Role>Senior Member</Role>
        <Status>1</Status>
    </Content>
.....
</Message>

我的问题:

  1. 此要求的可能解决方案是什么?(Except DOM解析 - 因为 XML 内容非常庞大)

  2. 有没有什么选择可以做到这一点JAXB2.0 ?

请就此提出您的建议。


考虑使用以下方法缩小源文档的大小StAX API http://docs.oracle.com/javase/7/docs/api/javax/xml/stream/package-summary.html.

对于给定的示例,此代码创建一个 DOM 文档,其根元素为Content元素:

class ContentFinder implements StreamFilter {
  private boolean capture = false;

  @Override public boolean accept(XMLStreamReader xml) {
    if (xml.isStartElement() && "Content".equals(xml.getLocalName())) {
      capture = true;
    } else if (xml.isEndElement() && "Content".equals(xml.getLocalName())) {
      capture = false;
      return true;
    }
    return capture;
  }
}

XMLInputFactory inFactory = XMLInputFactory.newFactory();
XMLStreamReader reader = inFactory.createXMLStreamReader(inputStream);
reader = inFactory.createFilteredReader(reader, new ContentFinder());
Source src = new StAXSource(reader);
DOMResult res = new DOMResult();
TransformerFactory.newInstance().newTransformer().transform(src, res);
Document doc = (Document) res.getNode();

那么这可以是传递给 JAXB http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/JAXB.html#unmarshal%28javax.xml.transform.Source,%20java.lang.Class%29 as a DOM源 http://docs.oracle.com/javase/7/docs/api/javax/xml/transform/dom/DOMSource.html.

重写输出上的 XML 时可以使用类似的技术。

JAXB 似乎不接受StreamSource直接,至少在 Oracle 1.7 实现中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAXB 解组未知 XML 内容的子集 的相关文章

随机推荐

  • 将数据框折叠到一个变量上

    我有一个以下格式的数据框 Site Year Month Count1 Count2 Count3 Patch 1 1 May 15 12 10 1 1 1 May 8 0 5 2 1 1 May 3 1 2 3 1 1 May 4 4 1
  • 如何使用 C api 通过完整路径导入文件?

    PyObject PyImport ImportModule const char name 如何指定完整文件路径和模块名称 Like PyImport SomeFunction const char path to script cons
  • 如何在android中为ViewFlipper设置动态图像?

    我正在这样做 它正在加载静态这些图像 public class ArchiveGroup extends Activity Button btn ViewFlipper flip public void onCreate Bundle sa
  • SQL LIMIT 返回“零” - 0 - 行(PHP 中)

    当查询返回零行时 我在此查询中出现错误 错误号 1064 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在第 3 行 20 20 附近使用的正确语法 从玩家 pl 中选择 pl name pl email 在
  • 在 Webview.clearView() 后多次执行 WebView.loadurl() 会导致崩溃

    在 Webview clearView 之后多次执行 WebView loadurl 会导致崩溃 安卓4 0 3 这是 logcat 输出 Build fingerprint Lenovo P700i P700i 4 0 4 IMM76D
  • 尝试创建一个“值列表”,包括表值及其下面的数字

    所以基本上说我有一个名为 设备 的表 然后其中一列是 数量 如果我想创建一个采用该数字的值列表 假设数量为 4 并且值是 数量 1 直到 gt 0 所以在本例中为 4 3 2 1 我正在使用 Oracle APEX 并且假设我需要基于 sq
  • 如何提取文本字符串中的文本

    我有一个简单的问题 我希望在不使用 VBA 的情况下解决它 但如果这是解决它的唯一方法 那就这样吧 我有一个包含多行 均为一列 的文件 每行都有如下所示的数据 1 7 82E 13 gt gi 297848936 参考 XP 00 4 氢氧
  • Android 通知大图像不起作用

    我正在创建这样的通知 Intent intent new Intent this OfferNotification class PendingIntent pIntent PendingIntent getActivity this 0
  • 之间的区别。 git 中的 (点) 和 * (星号) 通配符

    我有一个本地存储库 并试图放弃自上次提交以来的所有更改 git checkout HEAD 命令 一切工作正常 即使更改是在某个子目录中 但是当我添加一些未跟踪的文件 满足中的掩码 gitignore 对存储库的根目录说 Ignored t
  • 测试 POSIX shell 合规性?

    如何测试 shell 脚本以验证它是否符合 POSIX 标准 我有大量为各种版本的 Bash 和可能的其他 shell 编写的脚本 我希望能够确定哪些完全符合 POSIX 标准 哪些不符合 理想情况下 我想找到类似的东西lint但对于 sh
  • virtualenv 和 pyenv 之间有什么关系?

    我最近学习了如何在工作流程中使用 virtualenv 和 virtualenvwrapper 但我在一些指南中看到了 pyenv 但我似乎无法理解 pyenv 是什么以及它与 virtualenv 有何不同 相似 pyenv 是 virt
  • CSS 未应用于 Visual Studio 2012 设计器?

    我有一些 css 当我的 CSS 文件内时 这些 css 不会应用于 Visual Studio 中的设计器 但会在我发布时应用于页面 这个问题大大减慢了网站开发速度 因为我正在尝试学习 CSS 下面是 CSS 的示例 header bac
  • android 获取CountdownTimer上的剩余时间并使用剩余时间作为分数

    所以我这里有测验应用程序和计时器 所以我想要发生什么 例如 我将计时器设置为 15 秒 如果用户在 5 秒内回答问题 我希望 10 秒的剩余时间变成 10 分 它将添加到之前的分数加上您将获得的分数回答问题 所以现在我有这个 if save
  • 使用 firebaserecycleradapter 过滤 recyclerview

    我有一个带有 FirebaseRecyclerAdapter 的 RecyclerView 当用户开始在 SearchView 中输入内容时 我想用名称列表填充 RecyclerView public class SchoolsAdapte
  • Android 到 PC USB 读/写

    我在 PC 上有一个程序 从 USB 接收字符串输入 旧程序 我有一个 Android 4 X 平板电脑 需要向在 PC 上运行的程序提供 USB 上的字符串输入 当我在 Android 上使用示例代码时 以下代码给出了空的哈希图 PC 在
  • 这个“模式”有名字吗?

    我想知道这个 模式 是否有一个名称 其中方法签名称为 TrySomething 例如int TryParse decimal TryParse etc 我的一位同事经常使用这种命名约定 他们不会返回值或抛出异常 而是调用一个方法TryDoS
  • sql Server:按积分总和排名并按排名排序

    我有一个包含以下字段的游戏桌 ID Name Email Points 1 John email protected cdn cgi l email protection 120 2 Test email protected cdn cgi
  • 哪个更快:x<<1 或 x<<10?

    我不想优化任何东西 我发誓 我只是出于好奇而想问这个问题 我知道在大多数硬件上都有位移位的汇编命令 例如shl shr 这是一个单一命令 但移位多少位 从纳秒角度或从 CPU 角度角度 是否重要 换句话说 以下任一选项在任何 CPU 上都更
  • ghc-pkg 检查黑线鳕警告

    全新安装 haskell 平台后 通过homebrew GHC x64 7 6 3 on OSX 10 9 2当我运行时 我收到以下警告ghc pkg check 见下文 Warning haddock interfaces Users u
  • JAXB 解组未知 XML 内容的子集

    我有一个要求unmarshall未知的子集XML内容 对于该未编组的对象 我需要修改一些内容并将相同的 XML 内容 子集 与原始 XML 重新绑定 输入 XML 示例