在尝试使用XML
阅读StAX
文件时,我遇到了这个问题。
在XML
文件(本质上是其XLIFF
文件)中,我有一个名称相同的子节点。
我无法弄清楚如何阅读这些重复的节点。
以下是我正在尝试的代码部分,以及XLIFF
文件的示例
这只是代码的工作部分。
Java代码:
// Initialize ArrayList to return
ArrayList<SourceCollection> xmlData = new ArrayList<>();
boolean isSource = false;
boolean isTrans = false;
boolean isContext = false;
// Setting Up Data Class
SourceCollection srcData = null;
// Start StAX XLIFF reader
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
try {
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(inStream);
int event = xmlStreamReader.getEventType();
while (true) {
switch (event) {
case XMLStreamConstants.START_ELEMENT:
switch (xmlStreamReader.getLocalName()) {
case "group":
// Create SourceCollection Object
srcData = new SourceCollection();
srcData.setID(xmlStreamReader.getAttributeValue(0));
break;
case "source":
isSource = true;
break;
case "target":
isTarget = true;
break;
case "context":
isContext = true;
break;
default:
isSource = false;
isTarget = false;
isContext = false;
break;
}
break;
case XMLStreamConstants.CHARACTERS:
if (srcData != null) {
String srcTrns = xmlStreamReader.getText();
if (!Utility.isStringNullOrEmptyOrWhiteSpace(srcTrns)) {
if (isSource) {
srcData.setSource(srcTrns);
isSource = false;
} else if (isTarget) {
srcData.setTarget(srcTrns);
isTarget = false;
}
}
}
break;
case XMLStreamConstants.END_ELEMENT:
if (xmlStreamReader.getLocalName().equals("group")) {
xmlData.add(srcData);
}
break;
}
if (!xmlStreamReader.hasNext()) {
break;
}
event = xmlStreamReader.next();
}
} catch (XMLStreamException ex) {
LOG.log(Level.WARNING, ex.getMessage(), MessageFormat.format("{0} {1}", ex.getCause(), ex.getLocation()));
}
XLIFF文件示例:
<XLIFF>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<file datatype="xml">
<body>
<group id="25032014">
<context-group>
<context context-type="sub1">xxxx</context>
<context context-type="sub2">yyyy</context>
<context context-type="sub3"/>
</context-group>
<target-unit>
<source>ABC</source>
<target>ABC</target>
</target-unit>
</group>
</body>
</file>
</xliff>
</XLIFF>
当然,这是一个修改过的XLIFF文件,但结构与原始文件完全相同。
任何样本或建议都会有所帮助。
答案 0 :(得分:1)
但您已经处理了这些重复项。我修改了你的代码
switch (event) {
case XMLStreamConstants.START_ELEMENT:
System.out.println(xmlStreamReader.getLocalName());
switch (xmlStreamReader.getLocalName()) {
而System.out
传递:
XLIFF
xliff
file
body
group
context-group
context
context
context
target-unit
source
target
您会看到多个context
输出。现在,您必须调整数据结构以保存上下文元素列表,而不仅仅是一个。