使用Castor根据属性值解析xml

发布于 2024-08-18 01:57:19 字数 409 浏览 4 评论 0原文

使用 Castor 使用映射文件将以下 xml 解析为 POJO 相当简单:

<human name="bob"/>
<dog owner="alice"/>

它使用要映射到类的元素。但是如果应该使用属性来进行映射怎么办?例如:

<animal type="human" name="bob"/>
<animal type="dog" owner="alice"/>

这个人为的示例基于我必须使用的 XML(尽管它不是我创作的!)。关于如何使用 Castor 映射文件解决这个问题有什么想法吗?

Using Castor to parse the following xml into POJOs using a mapping file is fairly straightforward:

<human name="bob"/>
<dog owner="alice"/>

It uses the name of the element to map to the class. But what if an attribute should be used to do the mapping? e.g.:

<animal type="human" name="bob"/>
<animal type="dog" owner="alice"/>

This contrived example is based on XML that I have to consume (tho I didn't author it!). Any ideas on how to approach this with Castor mapping files?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱她像谁 2024-08-25 01:57:19

有两种方法可以解决这个问题。更改 Java 类结构,让人类和狗扩展 Animal,然后为 Animal 编写映射文件。

或者只是使用 XSLT 来转换数据。像这样的事情可能会起作用:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="animal">
  <xsl:text disable-output-escaping="yes"><![CDATA[<]]></xsl:text>
       <xsl:value-of select="@type" /><xsl:text disable-output-escaping="yes"> </xsl:text>name="<xsl:value-of select="@name" />"
  <xsl:text disable-output-escaping="yes"><![CDATA[/>]]></xsl:text>
</xsl:template>
</xsl:stylesheet>

There are two ways to approach this. Change your Java class structure to have human and dog extend animal, and then write a mapping file for Animal.

Or just use XSLT to transform you data. Something like this might work:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="animal">
  <xsl:text disable-output-escaping="yes"><![CDATA[<]]></xsl:text>
       <xsl:value-of select="@type" /><xsl:text disable-output-escaping="yes"> </xsl:text>name="<xsl:value-of select="@name" />"
  <xsl:text disable-output-escaping="yes"><![CDATA[/>]]></xsl:text>
</xsl:template>
</xsl:stylesheet>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文