Как поместить извлеченные элементы XML в новую строку в Java? - PullRequest
0 голосов
/ 17 ноября 2011

У меня возникла проблема с тем, как поместить извлеченные элементы XML в новую строку?потому что я получаю, что элементы отображаются в одной строке.

это XML-файл.

<?xml version="1.0" encoding="UTF-8"?>

 <PayrollRequest>

        <PayrollCost>

            <PayrollID>123</PayrollID>

            <BatchID>
                <No>7770</No>
                <No>8888</No>
                <No>1234</No>
                <No>9999</No>
            </BatchID>

            <CompanyId>
                <CompanyId>001</CompanyId>
                <CompanyDescription>KukuKambing</CompanyDescription>
            </CompanyId>

            <CategoryCost>
                <GrossPay>60000</GrossPay>
            </CategoryCost>

        </PayrollCost>


</PayrollRequest>

и это код в Java:

import javax.xml.namespace.QName;
import java.util.Properties;

import com.ddtek.xquery3.XQConnection;
import com.ddtek.xquery3.XQException;
import com.ddtek.xquery3.XQExpression;
import com.ddtek.xquery3.XQItemType;
import com.ddtek.xquery3.XQSequence;
import com.ddtek.xquery3.xqj.DDXQDataSource;

public class XQueryTest4 {

  // Filename for XML document to query
  private String filename;

  // Data Source for querying
  private DDXQDataSource dataSource;

  // Connection for querying
  private XQConnection conn;

  public XQueryTest4(String filename) {
    this.filename = "SamplePayroll2.xml";
  }

  public void init() throws XQException {
    dataSource = new DDXQDataSource();
    conn = dataSource.getConnection();
  }

  public String query(String queryString) throws XQException {
    XQExpression expression = conn.createExpression();
    expression.bindString(new QName("docName"), filename,
      conn.createAtomicType(XQItemType.XQBASETYPE_STRING));
    XQSequence results = expression.executeQuery(queryString);
    return results.getSequenceAsString(new Properties());
 }

  public static void main(String[] args) {


        try {

             XQueryTest4 tester = new XQueryTest4("SamplePayroll2.xml");
             tester.init();

             final String sep = System.getProperty("line.separator");
             String queryString =

             "declare variable $docName as xs:string external;" + sep +
             "   for $PayrollRequest in doc($docName)/PayrollRequest " +
             "   return " +
             "$PayrollRequest/PayrollCost/BatchID/No/text()";              
             System.out.println(tester.query(queryString));
           } catch (Exception e) {
             e.printStackTrace(System.err);
             System.err.println(e.getMessage());
           }
    }
 }

вывод, который я получаю, находится в одной строке: 7770888812349999

но то, что я хочу, это должно быть так:

     7770
     8888
     1234
     9999

Я пытался использовать \ n \г, но, кажется, не работает вообще .. какие-либо решения для моих проблем?спасибо!

1 Ответ

0 голосов
/ 17 ноября 2011

XQSequence подобен результирующему набору - не получайте его в виде строки, вместо этого используйте next() и т. Д., Чтобы выполнить итерацию по нему и построить нужную строку, используя каждый отдельный элемент.

...