【问题标题】:How to parse the full content of a XML element to object in java如何将 XML 元素的全部内容解析为 java 中的对象
【发布时间】:2021-06-16 07:46:34
【问题描述】:

我有某种复杂的 XML 数据结构。该结构包含不同的片段,如下例所示:

<data>
   <content>
     <h1>Hello <strong>World</strong>. This is some text.</h1>
   </content>
   <content2>.....</content2>
  ....
</data>

Java 对象的样子,

@Getter
@NoArgsConstructor
@AllArgsConstructor
@XmlRootElement(name = "data")
public class Data
{
  @XmlElement(name = "content")
  private Content content;
  
  @XmlElement(name = "content2")
  private Content2 content2;
}


@Getter
@NoArgsConstructor
@AllArgsConstructor
@XmlRootElement(name = "content")
public class Content
{
  @XmlElement(name = "h1")
  private H1 h1;
 
}

@Getter
@NoArgsConstructor
@AllArgsConstructor
@XmlRootElement(name = "h1")
public class H1
{
  @XmlPath("text()")
  private String text;

  @XmlElement(name = "strong")
  private String strong;
  
}

但我将 h1 -> text 的值设为“Hello”,但我也想要全文值

“你好。这是一些文字。”

“Hello World。这是一些文本。”

请帮助我。提前致谢

【问题讨论】:

  • 看起来您在 XML 中嵌入了 HTML。这意味着您的 XML 现在很可能格式不正确,并且无法解析它。如果你幸运的话,你可能会得到一些东西,但你的代码将仍然不可靠。您必须先修复输入数据。如果事实证明你确实有有效的 XML 碰巧使用了 HTML 之类的标签,那么你应该能够遍历 h1 标签的 DOM 树并吐出所有文本。
  • 看起来上面的文档格式正确。仅仅因为您认为它是 HTML 并不会使文档格式错误。

标签: java xml xml-parsing


【解决方案1】:

在我看来,您认为是按设计工作的。

您的 H1 课程具有元素 text 和 strong。指示解析器使用 H1 的 text() 内容填充 H1.text,根据定义,该内容是该级别上所有文本部分的串联。即使填充了 strong 字段,您也会丢失在原始文本中找到 strong 的信息。

我相信将内容定义为 DOM XML 数据可能会更好(不确定如何使用您使用的注释来完成),因此稍后如果需要,您可以将其序列化回原始字符串。

【讨论】:

    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2016-12-02
    • 2017-10-14
    相关资源
    最近更新 更多