gpt4 book ai didi

java - 如何以适合 JAXB 和 Java 的方式表示 XML 模式中的对象层次结构

转载 作者:行者123 更新时间:2023-12-01 05:06:56 24 4
gpt4 key购买 nike

我有一个代表分类的数据模型。分类法是类别的层次结构,例如

Food
+- Pasta
+- Spaghetti

我想将其表示为

<taxonomy>
<category id="cat001" name="Food"/>

<category id="cat002" name="Pasta">
<parentCategory>
<category ref="cat001"/>
</parentCategory>
</category>

<category id="cat003" name="Spaghetti">
<parentCategory>
<category ref="cat002"/>
</parentCategory>
</category>
</taxonomy>

在 XML 架构 (XSD) 中表示这一点的最佳方式是什么?

另外,我如何确保在使用 JAXB 时,我可以获得类似的内容

class Category {
String name;
Category parentCategory;
}

此外,如果我的分类不是一棵严格的树,而是一张图表,其中可能有多个父关系,例如意大利面条属于意大利面和面条,该怎么办

<taxonomy>
<category id="cat001" name="Food"/>

<category id="cat002" name="Pasta">
<parentCategories>
<category ref="cat001"/>
</parentCategories>
</category>

<category id="cat003" name="Noodles">
<parentCategories>
<category ref="cat001"/>
</parentCategories>
</category>

<category id="cat004" name="Spaghetti">
<parentCategories>
<category ref="cat002"/> <!-- Pasta -->
<category ref="cat003"/> <!-- Noodles -->
</parentCategory>
</category>
</taxonomy>

使用 JAXB,我想生成类似的东西

class Category {
String name;
List<Category> parentCategories;
}

请注意,Java 代码经过简化仅用于说明目的。使用 JAXB 代码生成,我不介意有一个容器对象,例如具有类别属性的parentCategory

最佳答案

建议 - 从 Java 对象开始

对于您的用例,我建议从您想要的对象模型开始,然后应用 JAXB annotations将其映射到所需的 XML 表示形式。以下示例应该有所帮助:

XML 架构

如果您随后需要 XML 架构,您可以从 JAXB 模型生成一个 XML 架构。

import java.io.IOException;
import javax.xml.bind.*;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;

public class Demo {

public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(SpThread.class);

jc.generateSchema(new SchemaOutputResolver() {

@Override
public Result createOutput(String namespaceUri, String suggestedFileName) throws IOException {
StreamResult result = new StreamResult(System.out);
result.setSystemId(suggestedFileName);
return result;
}

});
}

}

共享引用

您可以使用@XmlID@XmlIDREF 在XML 文档中创建基于键的引用。

关于java - 如何以适合 JAXB 和 Java 的方式表示 XML 模式中的对象层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12531458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com