Ich versuche, eine MSXML zu analysieren, die eine Antwort von einem Web Services über XmlStreamReader ist.Apex: Wie bekomme ich alle Kind Elemente eines XML? - Parsing xml über XmlStreamReader
Der Code unten ist die Antwort vom Web-Service:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="Report">
<Table>
<Row>
<Cell ss:StyleID="Default">
<Data ss:Type="String">Project Name</Data>
</Cell>
<Cell ss:StyleID="Default">
<Data ss:Type="String">Project Code</Data>
</Cell>
<Cell ss:StyleID="Default">
<Data ss:Type="String">Project URI Report Setting</Data>
</Cell>
<Cell ss:StyleID="Default">
<Data ss:Type="String">Entry Date</Data>
</Cell>
<Cell ss:StyleID="Default">
<Data ss:Type="String">Actual Billable Hours (Selected Dates)</Data>
</Cell>
<Cell ss:StyleID="Default">
<Data ss:Type="String">Actual Non-Billable Hours (Selected Dates)</Data>
</Cell>
<Cell ss:StyleID="Default">
<Data ss:Type="String">User Name</Data>
</Cell>
<Cell ss:StyleID="Default">
<Data ss:Type="String">User Default Billing Rate</Data>
</Cell>
<Cell ss:StyleID="Default">
<Data ss:Type="String">User Default Billing Rate (BC)</Data>
</Cell>
<Cell ss:StyleID="Default">
<Data ss:Type="String">Timesheet Start Date</Data>
</Cell>
<Cell ss:StyleID="Default">
<Data ss:Type="String">Timesheet End Date</Data>
</Cell>
</Row>
</Table>
</Worksheet>
</Workbook>
ich alle cell(s)
in jeder Zeile erhalten wollte.
Hier ist mein Code, wie analysiere ich die Antwort (davon ausgehen, dass reportXML ist die Antwort):
class Cell {
string data { get; set; }
}
XmlStreamReader xsr = new XmlStreamReader(reportXML);
while(xsr.hasNext()) {
if (xsr.getEventType() == XmlTag.START_ELEMENT) {
if (xsr.getLocalName() == 'Row') {
Cell cell = parseCell(xsr);
system.debug(cell);
}
}
xsr.next();
}
Cell parseCell(XmlStreamReader reader) {
Cell cell = new Cell();
while(reader.hasNext()) {
if (reader.getEventType() == XmlTag.END_ELEMENT) {
break;
}
else if (reader.getEventType() == XmlTag.CHARACTERS) {
cell.data = reader.getText();
}
reader.next();
}
return cell;
}
Das Problem ist, ich bin nur eine einzelne Zelle bekommen und nicht die ganze Zelle. Cell:[data=Project Name]
ist die einzige Daten aus den Debug-Logs, die ich denke nur die erste Spalte Zelle.
Warum? und was ist der Code, der die Logik zur Anzeige aller Zellendaten beeinträchtigt?