【问题标题】:Android: Retrieving XML results from a .NET soap Web ServiceAndroid:从 .NET soap Web 服务中检索 XML 结果
【发布时间】:2011-08-24 23:32:03
【问题描述】:

好的,我今天的问题是我试图从我的 .NET Web 服务返回 XML 结果。 XML 是直接从 SQL 存储过程生成的,XML 如下所示:

<?xml version="1.0" encoding="utf-8" ?> 
 <Details>
  <KlockleId>US0065NOVA</KlockleId> 
  <ListingPrice>54535.612830620680</ListingPrice> 
  <CurrencyCountry>US</CurrencyCountry> 
  <RealStateTax>0.000000000000</RealStateTax> 
  <CommonCharge>0.000000000000</CommonCharge> 
  <SquareFeet>4.200000000000000e+002</SquareFeet> 
  <ActivationDate>2011-04-19T16:16:46.577</ActivationDate> 
  <LotSize>0.000000000000000e+000</LotSize> 
  <YearBuilt>1969</YearBuilt> 
  <FirstName>Salmon Realty</FirstName> 
  <Phone>386 5474221</Phone> 
  <PropertyType>Condo/Co-op</PropertyType> 
  <Construction>Concrete</Construction> 
  <TotalRooms>None</TotalRooms> 
  <Bedroom>None</Bedroom> 
  <BathRoom>One</BathRoom> 
  <HalfBath>None</HalfBath> 
  <Address>600 Atlantic Ave N Unit: 1117</Address> 
  <Area>Volusia</Area> 
  <City>Daytona Beach</City> 
  <Country>United States</Country> 
  <PostalCode>32118</PostalCode> 
  <State>Florida</State> 
  <GMTOffset>0</GMTOffset> 
  <Status>Active</Status> 
  <Zooning>Residential</Zooning> 
  <PublicProperty>1</PublicProperty> 
  <DateAdded>2011-04-19T16:17:00</DateAdded> 
  <PropertyCategory>1</PropertyCategory> 
  <LoadType>2</LoadType> 
 </Details>

现在,当我使用 XML Pull Parser 时,它出现了一个错误:

05-12 21:42:02.963: WARN/System.err(1060): org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@44e847a8) 


我的 XML 解析器代码如下所示:

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.util.Xml;

public class PropertyDetailsHandler {

    private ArrayList<PropertyDetails> details;
    private StringReader xmlReader;

    private final String DETAILS = "Details";
    private final String COUNTRY = "Country";
    private final String CITY = "City";

    public PropertyDetailsHandler(String xml) {
        xmlReader = new StringReader(xml);
    }

    public void parse() throws XmlPullParserException, IOException {
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(xmlReader);

        // The StockQuote that is currently being parsed
        PropertyDetails currentProperty = null;

        // The current event returned by the parser
        int eventType = parser.getEventType();

        while (eventType != XmlPullParser.END_DOCUMENT) {
            String xmlNodeName;

            switch (eventType) {
            case XmlPullParser.START_DOCUMENT:
                details = new ArrayList<PropertyDetails>();
                break;
            case XmlPullParser.START_TAG:
                xmlNodeName = parser.getName();
                if (xmlNodeName.equalsIgnoreCase(DETAILS)) {
                    // When the  element is reached, create a new
                    // StockQuote.
                    currentProperty = new PropertyDetails();
                } else if (xmlNodeName.equalsIgnoreCase(COUNTRY)) {
                    currentProperty.setCountry(parser.nextText());
                } else if (xmlNodeName.equalsIgnoreCase(CITY)) {
                    currentProperty.setCity(parser.nextText());
                }
                break;
            case XmlPullParser.END_TAG:
                xmlNodeName = parser.getName();
                if (xmlNodeName.equalsIgnoreCase(DETAILS)) {
                    details.add(currentProperty);
                    break;
                }
            }

            eventType = parser.next();
        }
    }

    public ArrayList<PropertyDetails> getCountry() {
        return details;
    }
}

现在我只是试图从 XML 中解析 CityCountry,但正如您从错误中看到的那样,它甚至没有在我的标签上找到全部。那么,有什么建议吗?

【问题讨论】:

    标签: .net android xml parsing pull


    【解决方案1】:

    听起来您的 XMLReader 实例是空的:没有拉入任何东西。您检索密码的 URL 是否经过了某种身份验证?

    05-12 21:42:02.963: WARN/System.err(1060): org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT null@1:0 in java.io.InputStreamReader@44e847a8) 
    

    注意位置声明:1:0 表示错误发生在第 0 行的字符 1(或第 1 行的字符 0,我不记得他们是如何从版本到版本)。

    【讨论】:

    • 哦,好吧..我想我可能会看到这是怎么回事。看,没有“物理”XML 文件。我的 Web 服务是如何工作的,当调用 SOAP 操作时,它将一个存储过程发送到 SQL 服务器数据库,该数据库返回一个 XML。所以,这一切都是虚拟完成的。所以现在我理解了这个问题,有没有关于如何解析 SOAP 操作返回的 XML 文件的建议?
    • 在任何情况下,您都应该从 Web 服务中获取一些数据:您能否展示用于从 Web 服务中获取数据的代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多