XStream:为whole.xml提供可计算的单个标记

XStream:为whole.xml提供可计算的单个标记,xml,serialization,tags,xstream,Xml,Serialization,Tags,Xstream,使用lib时,my.xml结构应如下所示: <record>value1</record> ... <record>valueN</record> <tailRecord>recordsCount</tailRecord> value1 ... 瓦伦 唱片公司 tailRecord是整个.xml文件的最后一个标记。 它应该保存记录的数量,因此应该是可计算的 是否可以为XStream提供可计算的标记? 通

使用lib时,my.xml结构应如下所示:

<record>value1</record>
         ...
<record>valueN</record>
<tailRecord>recordsCount</tailRecord>
value1
...
瓦伦
唱片公司
tailRecord
是整个.xml文件的最后一个标记。
它应该保存
记录的数量
,因此应该是可计算的

是否可以为XStream提供可计算的标记?
通用用例如下:

当执行用户操作时,
记录
应该被添加,并且
尾记录
值应该被更新

,您将需要对您的模式进行轻微调整。而不是:

<record>value1</record>
<record>value2</record>
...
<record>valueN</record>
<tailRecord>recordsCount</tailRecord>
XStream(默认情况下)将检测到
value1
int
类型的节点(或
String
,或任何其他明显的基元类型)。然后,它会将多个
对象绑定到相应自动装箱类型的
java.utils.collections.List

然后,您将能够像平常一样使用
记录对象

System.out.println("There were " recordObject.getRecordCount() + " records found.");
注意:您可能对
tailRecord
XML元素有问题。我建议删除它,或者配置XStream,使用类似示例演示的
@xstreamitfield
注释完全忽略它

我的论点是,正确的OOD永远不会允许对象包含一个事物列表,也不会允许对象拥有一个表示列表大小的单独属性(
recordCount
)。您只需设计一个对象(如上面的示例)来包含这些内容的列表,并且最多有一个方便的方法,如
getRecordCount()
来在运行时返回列表的大小

我知道,出于其他原因(与遗留系统的接口等),您可能需要
tailRecord
元素,但团队认为它通过XStream并成为真正的Java对象,在Java领域没有什么用处


而且,如果出于某种原因我不理解你的问题,而这不是你想要的答案,我最后的建议是去看看。Smooks实现了
Visitor
接口,允许您在每次XML节点被其内部SAXParser访问时执行自定义处理。您可以将其配置为在每次到达
tailRecord
时运行计数方法,并按照您的要求汇总计数。祝你好运

您需要对您的模式进行轻微调整。而不是:

<record>value1</record>
<record>value2</record>
...
<record>valueN</record>
<tailRecord>recordsCount</tailRecord>
XStream(默认情况下)将检测到
value1
int
类型的节点(或
String
,或任何其他明显的基元类型)。然后,它会将多个
对象绑定到相应自动装箱类型的
java.utils.collections.List

然后,您将能够像平常一样使用
记录对象

System.out.println("There were " recordObject.getRecordCount() + " records found.");
注意:您可能对
tailRecord
XML元素有问题。我建议删除它,或者配置XStream,使用类似示例演示的
@xstreamitfield
注释完全忽略它

我的论点是,正确的OOD永远不会允许对象包含一个事物列表,也不会允许对象拥有一个表示列表大小的单独属性(
recordCount
)。您只需设计一个对象(如上面的示例)来包含这些内容的列表,并且最多有一个方便的方法,如
getRecordCount()
来在运行时返回列表的大小

我知道,出于其他原因(与遗留系统的接口等),您可能需要
tailRecord
元素,但团队认为它通过XStream并成为真正的Java对象,在Java领域没有什么用处


而且,如果出于某种原因我不理解你的问题,而这不是你想要的答案,我最后的建议是去看看。Smooks实现了
Visitor
接口,允许您在每次XML节点被其内部SAXParser访问时执行自定义处理。您可以将其配置为在每次到达
tailRecord
时运行计数方法,并按照您的要求汇总计数。祝你好运

您是否可以发布相关的代码片段,从您的输出中序列化
?我相信这是一个集合,您需要的是将
tailRecord
属性添加到您的Java bean中,该属性保存集合中的元素数。command
$xmlstarlet sel-t-v'sum(//record)'file.xml
打印记录的总和您是否可以发布相关的代码段,从输出中序列化
?我相信这是一个集合,您需要的是将
tailRecord
属性添加到您的Java bean中,该属性保存集合中的元素数records@sergionni我希望得到反馈,知道这个答案是否对你有帮助!如果不是的话,我可以回到绘图板上。@sergionni我希望得到反馈,看看这个答案是否对您有帮助!如果没有,我可以回到绘图板上。
System.out.println("There were " recordObject.getRecordCount() + " records found.");