我是JAVA的新手,我想阅读文本文件并用XML编写,这是我的输入:
和输出但是:
<ref id="1">
<label>1</label>
<citation-alternatives>
<mixed-citation>R.-J. Roe, J. Appl.Phys. 36, 2024 (1965).</mixed-citation>
</citation-alternatives>
</ref>
在许多情况下,这个输入有两行,它们之间没有空格,如下所示:
R.-J。鱼子,
学家Appl.Phys。 36,2024(1965)。
输出将是:
<ref id="1">
<label>1</label>
<citation-alternatives>
<mixed-citation>R.-J. Roe, </mixed-citation>
</citation-alternatives>
</ref>
<ref id="1">
<label>1</label>
<citation-alternatives>
<mixed-citation>J. Appl.Phys. 36, 2024 (1965).</mixed-citation>
</citation-alternatives>
</ref>
现在我的问题是我怎么能把这两行看成是第一个输出? 这是我的代码:
try {
String strLine;
String num="";
String mix="";
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
// Back element
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("Back");
doc.appendChild(rootElement);
// ref-list element
Element reflist = doc.createElement("ref-list");
rootElement.appendChild(reflist);
while( (strLine = br.readLine()) != null)
{
if (strLine.equals("")) {
continue;
}
int dotIndex = strLine.indexOf(".");
num = strLine.substring(0,dotIndex);
mix = strLine.substring(dotIndex+2,strLine.length());
// ref element
Element ref= doc.createElement("ref");
reflist.appendChild(ref);
// set attribute of ref element
Attr attr = doc.createAttribute("id");
attr.setValue(num);
ref.setAttributeNode(attr);
// label element
Element label = doc.createElement("label");
ref.appendChild(label);
label.setTextContent(num);
// citation-alternatives element
Element citationalternatives = doc.createElement("citation-alternatives");
ref.appendChild(citationalternatives);
// mixed-citation element
Element mixedcitation = doc.createElement("mixed-citation");
citationalternatives.appendChild(mixedcitation);
mixedcitation.setTextContent(mix);
}
答案 0 :(得分:1)
在将strLine插入元素之前,检查是否strLine.endsWith(“,”),如果是,则读取下一行(依此类推)并附加到第一个strLine。
答案 1 :(得分:0)
您的代码在读取包含额外换行符的记录时创建两个<ref>
记录的原因是您使用换行符来定义记录何时开始。
您需要清楚地定义标记开始记录的内容。
例如,也许所有记录都以一个数字后跟一个句点开头。也许它更具可预测性:它们都以序号开头,后跟一段时间。利用这个逻辑,我们可以创建一个有条件的新元素:
Element ref= doc.createElement("ref");
while( (strLine = br.readLine()) != null) {
if (strLine.equals(""))
continue;
int dotIndex = strLine.indexOf(".");
num = strLine.substring(0,dotIndex);
mix = strLine.substring(dotIndex+2,strLine.length());
if(refStart(strLine)) {
ref= doc.createElement("ref");
reflist.appendChild(ref);
}
//now decide how to parse the input - maybe it will be different depending on
//whether the line we just read starts a new record or continues one from
//the previous line.
}
public boolean refStart(String line) {
if(line.length()<2)
return false;
int dotIndex = strLine.indexOf(".");
if(dotIndex<=0 || dotIndex>5) //assuming largest value is 99999
return false;
String numString = strLine.substring(0,dotIndex);
for(int i=0; i<numString.length(); i++) {
if(!Character.isDigit(numString.charAt(i) )
return false;
}
return true;
}