gpt4 book ai didi

java - 如何使用 SimpleXml 和 Java 动态生成 XML?元素,ElementList 应该动态出现在随机位置

转载 作者:行者123 更新时间:2023-11-30 09:44:02 29 4
gpt4 key购买 nike

在使用 SimpleXml 生成 XML 文件时,我遇到了充满挑战的问题。

我想通过以下方式进行动态xml输出。

<process>
<sequence> ... </sequence>
<flow> ... </flow>
<sequence> ... </sequence>
<flow> ... </flow>
</process>

问题是如何使用 SimpleXMl 在架构中定义?

现在是这个样子

@Root
public class Process {


@ElementList(inline=true, required = false)
private List<Sequences> sequence;

@ElementList(inline=true, required = false)
private List<Flows> flow;
}

根据此架构,它始终生成以下格式的 XML:

<process>
<sequence> ... </sequence>
<sequence> ... </sequence>
<flow> ... </flow>
<flow> ... </flow>
</process>

我该怎么办?谢谢。

最佳答案

这是您需要从文档中使用的方式:

http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#scatter

祝你好运。


分散内联元素条目

散布在整个 XML 文档中的元素可以通过内联列表和内联映射来收集。只需为列表或映射要收集的 XML 元素名称提供一个条目名称,它们将被提取并放入集合对象中。例如,采用以下 XML 元素。它包含没有特定顺序的 include 和 exclude XML 元素。即使它们没有按任何顺序排列,反序列化过程也能够收集遇到的 XML 元素。

<fileSet path="/user/niall">
<include pattern=".*.jar"/>
<exclude pattern=".*.bak"/>
<exclude pattern="~.*"/>
<include pattern=".*.class"/>
<exclude pattern="images/.*"/>
</fileSet>

为了实现这一点,可以使用以下对象。这声明了两个内联集合,它们指定了它们正在收集的条目对象的名称。如果未指定条目属性,则将使用对象的名称。

@Root
public class FileSet {

@ElementList(entry="include", inline=true)
private List<Match> include;

@ElementList(entry="exclude", inline=true)
private List<Match> exclude;

@Attribute
private File path;

private List<File> files;

public FileSet() {
this.files = new ArrayList<File>();
}

@Commit
public void commit() {
scan(path);
}

private void scan(File path) {
File[] list = path.listFiles();

for(File file : list) {
if(file.isDirectory()) {
scan(path);
} else {
if(matches(file)) {
files.add(file);
}
}
}
}

private boolean matches(File file) {
for(Match match : exclude) {
if(match.matches(file)) {
return false;
}
}
for(Match match : include) {
if(match.matches(file)) {
return true;
}
}
return false;
}

public List<File> getFiles() {
return files;
}

@Root
private static class Match {

@Attribute
private String pattern;

public boolean matches(File file) {
Stirng path = file.getPath();

if(!file.isFile()) {
return false;
}
return path.matches(pattern);
}
}
}

关于java - 如何使用 SimpleXml 和 Java 动态生成 XML?元素,ElementList 应该动态出现在随机位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8095743/

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