Ошибка синтаксического анализатора XML: элемент поврежден. ноль - PullRequest
0 голосов
/ 26 февраля 2012

У меня есть приложение flex 4.6, вызывающее веб-сервис, который обращается к серверу MS SQl. Я использую (или пытаюсь использовать) созданный мной веб-сервис. Кажется, веб-служба работает, возвращаемый XML выглядит нормально, но я получаю сообщение об ошибке ниже.

"XML parser failure: element is malformed. null"

Я погуглил эту ошибку и провел некоторое исследование, и то, что я понял, связано с тем, как формат XML поступает из веб-службы.

Я написал веб-сервис на c # и протестировал его. Сервис перестраивает следующую структуру XML:

<root>
<pub>
<PublicationId>BIA-B0112</PublicationId>
<TargetPPODate>2012-02-28</TargetPPODate>
<TargetPPIDate>2012-03-13</TargetPPIDate>
<TargetRIPDate>2012-03-16</TargetRIPDate>
</pub>
</root> 

формат не выглядит неправильно для меня, вот мой код C #, который возвращает это.

// Connect to the database and run the query
SqlConnection conn = new SqlConnection(bldr.ToString());
SqlCommand cmd = new SqlCommand("AWFE.dbo.Connect_PubInfo");
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("@Pubid", BookName));
conn.Open();
cmd.Connection = conn;

SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
ds.DataSetName = "root";
da.SelectCommand = cmd;
da.Fill(ds, "pub");

// Return the data as XML
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(ds.GetXml());
return xmlDoc;

и вот сценарий действия, который я использую:

   <?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       xmlns:service1="services.service1.*"
                       width="529" height="322">

    <fx:Script>
        <![CDATA[
            import com.adobe.serializers.utility.TypeUtility;

            import mx.controls.Alert;
            import mx.events.FlexEvent;


            protected function dataGrid_creationCompleteHandler(event:FlexEvent):void
            {
                PubInfoResult.token = service1.PubInfo("FRP-Q0112");
            }

        ]]>
    </fx:Script>

    <fx:Declarations>
        <s:CallResponder id="PubInfoResult"/>
        <service1:Service1 id="service1"
                           fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)"
                           showBusyCursor="true"/>
        <!-- Place non-visual elements (e.g., services, value objects) here -->


    </fx:Declarations>
    <s:TextInput id="BookCode" x="9" y="22"/>
    <s:DataGrid id="dataGrid" x="75" y="95"
                creationComplete="dataGrid_creationCompleteHandler(event)" requestedRowCount="4">
        <s:columns>
            <s:ArrayList>
            </s:ArrayList>
        </s:columns>
        <s:typicalItem>
            <fx:Object></fx:Object>
        </s:typicalItem>
        <s:AsyncListView list="{TypeUtility.convertToCollection(PubInfoResult.lastResult)}"/>
    </s:DataGrid>


</s:WindowedApplication>

Я - новый flex и веб-сервисы, поэтому у меня возникли некоторые проблемы в этой области, любая помощь будет отличной.

1 Ответ

0 голосов
/ 26 февраля 2012

Что я не сделал, так это установил тип возврата службы в службе данных - flash Builder, как только я сделал, чтобы ошибка была исправлена. теперь я столкнулся с другой проблемой, которую я должен исследовать. теперь он только перенастраивает корневой элемент возвращаемого XML-файла, мне нужны данные в элементе.

спасибо всем за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...