xhtml-sida som datakälla

Supportfrågor för server och klient (Windows, iPhone, Android, Linux).
Forum rules
För att kunna hjälpa dig med supportfrågor behöver vi så mycket information som möjligt.
Innan du skapar en ny tråd, läs gärna:
viewtopic.php?f=10&t=20
bunker
3 stars
3 stars
Posts: 130
Joined: Thu 23 Dec 2010, 11:26

xhtml-sida som datakälla

Post by bunker » Sat 01 Jan 2011, 16:50

Jag har en xhtml-sida jag skulle vilja hämta väderdata från. Dessvärre får Switch King problem när jag försöker använda den.

Först försökte jag med xpath och med hjälp av xpather fick jag fram söksträngen:

Code: Select all

/html/body/div[@id='page']/div[@id='main-copy']/div/div/div/table[1]/tbody/tr[3]/td[1]/table/tbody/tr[2]/td[2]/span[@id='ajaxtemp']
Dessvärre verkar något då gå fel på serverssidan, och GUI:t på Windows klienten hänger sig tillfälligt. På servern finns följande i loggen:

Code: Select all

{BusinessAccessDataCollection - Collection} --<Error> -- 2011-01-01 16:37:18 -- Failed to collect data for data source with id 3 and name Viby, Sollentuna. Exception: 
Level 1) The underlying connection was closed: The connection was closed unexpectedly.

StackTrace for Level 1:
   at System.Net.HttpWebRequest.GetResponse()
   at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials)
   at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials)
   at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
   at System.Xml.XmlTextReaderImpl.OpenStream(Uri uri)
   at System.Xml.XmlTextReaderImpl.PushExternalEntity(SchemaEntity entity, Int32 entityId)
   at System.Xml.XmlTextReaderImpl.DtdParserProxy_PushEntity(SchemaEntity entity, Int32 entityId)
   at System.Xml.XmlTextReaderImpl.DtdParserProxy.System.Xml.IDtdParserAdapter.PushEntity(SchemaEntity entity, Int32 entityId)
   at System.Xml.DtdParser.HandleEntityReference(XmlQualifiedName entityName, Boolean paramEntity, Boolean inLiteral, Boolean inAttribute)
   at System.Xml.DtdParser.HandleEntityReference(Boolean paramEntity, Boolean inLiteral, Boolean inAttribute)
   at System.Xml.DtdParser.GetToken(Boolean needWhiteSpace)
   at System.Xml.DtdParser.ParseSubset()
   at System.Xml.DtdParser.ParseExternalSubset()
   at System.Xml.DtdParser.ParseInDocumentDtd(Boolean saveInternalSubset)
   at System.Xml.DtdParser.Parse(Boolean saveInternalSubset)
   at System.Xml.XmlTextReaderImpl.DtdParserProxy.Parse(Boolean saveInternalSubset)
   at System.Xml.XmlTextReaderImpl.ParseDoctypeDecl()
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
   at System.Xml.XmlDocument.Load(XmlReader reader)
   at System.Xml.XmlDocument.LoadXml(String xml)
   at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.Xml.AbstractXmlCollector.GetXmlDataFromContent(String content)
   at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.Xml.AbstractXmlCollector.GetDataFromSource(Int32 maxBatchSize, CollectorStatus& status, Int32& documentsCollected, List`1& urisCollectedSuccessfully)
   at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.Xml.SimpleXmlCollector.ReadFromSource()
   at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.Xml.SimpleXmlCollector.Collect()
   at SwitchKing.Server.BusinessAccess.DataCollection.Engines.DataCollectorEngine.Collect(DataSource src, DataSourceEntity& srcAccess, DataSourceValueEntity& valueAccess, EntityLogEntryEntity& logAccess)
Så då tänkte jag prova att söka efter en xml-tagg, eftersom xhtml är xml. Men det går inte, det är en span tag och det finns förstås massor av span taggar i sidan och anger jag attribut så visar Switch King att sluttaggen kommer ha attribut vilket väl knappast är tillåten xml? Så jag hittade på nån tag som kanske skulle kunnat funka i min drömvärld men då får jag samma fel i server loggen ser det ut som:

Code: Select all

{BusinessAccessDataCollection - Collection} --<Error> -- 2011-01-01 16:33:35 -- Failed to collect data for data source with id 3 and name Viby, Sollentuna. Exception: 
Level 1) The underlying connection was closed: The connection was closed unexpectedly.

StackTrace for Level 1:
   at System.Net.HttpWebRequest.GetResponse()
   at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials)
   at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials)
   at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
   at System.Xml.XmlTextReaderImpl.OpenStream(Uri uri)
   at System.Xml.XmlTextReaderImpl.PushExternalEntity(SchemaEntity entity, Int32 entityId)
   at System.Xml.XmlTextReaderImpl.DtdParserProxy_PushEntity(SchemaEntity entity, Int32 entityId)
   at System.Xml.XmlTextReaderImpl.DtdParserProxy.System.Xml.IDtdParserAdapter.PushEntity(SchemaEntity entity, Int32 entityId)
   at System.Xml.DtdParser.HandleEntityReference(XmlQualifiedName entityName, Boolean paramEntity, Boolean inLiteral, Boolean inAttribute)
   at System.Xml.DtdParser.HandleEntityReference(Boolean paramEntity, Boolean inLiteral, Boolean inAttribute)
   at System.Xml.DtdParser.GetToken(Boolean needWhiteSpace)
   at System.Xml.DtdParser.ParseSubset()
   at System.Xml.DtdParser.ParseExternalSubset()
   at System.Xml.DtdParser.ParseInDocumentDtd(Boolean saveInternalSubset)
   at System.Xml.DtdParser.Parse(Boolean saveInternalSubset)
   at System.Xml.XmlTextReaderImpl.DtdParserProxy.Parse(Boolean saveInternalSubset)
   at System.Xml.XmlTextReaderImpl.ParseDoctypeDecl()
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
   at System.Xml.XmlDocument.Load(XmlReader reader)
   at System.Xml.XmlDocument.LoadXml(String xml)
   at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.Xml.AbstractXmlCollector.GetXmlDataFromContent(String content)
   at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.Xml.AbstractXmlCollector.GetDataFromSource(Int32 maxBatchSize, CollectorStatus& status, Int32& documentsCollected, List`1& urisCollectedSuccessfully)
   at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.Xml.SimpleXmlCollector.ReadFromSource()
   at SwitchKing.Server.BusinessAccess.DataCollection.Collectors.Xml.SimpleXmlCollector.Collect()
   at SwitchKing.Server.BusinessAccess.DataCollection.Engines.DataCollectorEngine.Collect(DataSource src, DataSourceEntity& srcAccess, DataSourceValueEntity& valueAccess, EntityLogEntryEntity& logAccess)

Jag tycker egentligen mest det ser ut som att det är problem att överhuvud taget hämta sidan. Har jag anget länken i fel format?
Eftersom forumet är indexerat på Google lägger jag länken i en bilaga för jag vill inte att den här diskussionen ska associeras med sidan.
You do not have the required permissions to view the files attached to this post.

Westlund
2 stars
2 stars
Posts: 27
Joined: Tue 09 Nov 2010, 21:51

Re: xhtml-sida som datakälla

Post by Westlund » Sat 01 Jan 2011, 21:33

Hej!

Kan du inte plocka datat direkt från http://www.tekannan.se/weather1/clientraw.txt
Där ligger alla värden i från väderstationen.

Jag gör så själv fast från min station.

Separeringstecken lämnar du blankt, fältindex = 5, specifik rad = 1

MVH

Fredrik

Martin
Administrator
Administrator
Posts: 2655
Joined: Tue 09 Nov 2010, 20:25

Re: xhtml-sida som datakälla

Post by Martin » Sat 01 Jan 2011, 21:38

Med risk för ett lite väl tekniskt inlägg... Den ointresserade får blunda ;)

Efter att ha googlat lite på detta kan jag konstatera att orsaken är att servern (eller i själva verket .NET Framework) tittar i huvudet på xhtml-sidan och ser att det finns en DTD där.
Därefter görs en automatisk resolve på DTD:n för att kunna validera sidans entiteter, vilket fallerar.

Det är många som sliter sitt hår med detta, av google att döma, och lösningen jag hittills sett är att mellanlagra schemafilerna lokalt vilket inte alls är optimalt.

Om det finns en raw-fil att läsa ifrån så skulle jag starkt rekommendera det.
Martin | Switch King

Westlund
2 stars
2 stars
Posts: 27
Joined: Tue 09 Nov 2010, 21:51

Re: xhtml-sida som datakälla

Post by Westlund » Sat 01 Jan 2011, 21:52

Hej igen!

Kom på en sak.... Om du plockar värdet från clinetrawfilen och vill få ut värdet på webbsidan så har jag för mig att du behöver göra en ändring i DataSourceControl.ascx.cs, annars kan du få problem när det är minusgrader, detta märkte jag. Tror Martin har skrivit att detta skulle fixas i version 0.9 i webbtilläget. Hör av dig om du vill ha den ändrade filen.

MVH

Fredrik

bunker
3 stars
3 stars
Posts: 130
Joined: Thu 23 Dec 2010, 11:26

Re: xhtml-sida som datakälla

Post by bunker » Sun 02 Jan 2011, 19:39

@Westlund: Tack för tipset. Som du säkert förstått är det inte min väderstation och därför kände jag inte till länken till rådatat. Det fungerar som du beskrev det men jag var tvungen att använda mellanslag som separator eftersom tomt fält inte är tillåtet. Jag skulle även behöva fixen för problemet i webb-tillägget eftersom 0.9 inte kommit ut ännu vad jag kan hitta. Jag har listat ut att den problematiska raden borde vara:

Code: Select all

Decimal decValue = dsv.Value == null || dsv.Value.Length == 0 ? 0 : Decimal.Parse(dsv.Value);
@Martin: Tack för förklaringen, jag förstod den faktiskt. Känner igen det där, är ju en av de stora svagheterna i xml kan jag tycka, man blir beroende av en extern dtd om man inte speglar den på sin egen server. :geek:

Westlund
2 stars
2 stars
Posts: 27
Joined: Tue 09 Nov 2010, 21:51

Re: xhtml-sida som datakälla

Post by Westlund » Sun 02 Jan 2011, 20:33

Hej igen!

Kan förstå att du inte hade koll på var rådatat fanns om det inte var din station, jag kör ju själv Weather display Live och efter lite letande i koden så hittade jag adressen till filen. Jag vet ju att jag ställde in det på min egna server en gång i tiden. Så klart det ska vara mellanslag, jag kollade bara mina inställningar i switchking, och där såg det ju blankt ut :)

Tror detta ska funka....

Decimal decValue = dsv.Value == null || dsv.Value.Length == 0 ? 0 : Decimal.Parse(dsv.Value);

MVH

Fredrik

Westlund
2 stars
2 stars
Posts: 27
Joined: Tue 09 Nov 2010, 21:51

Re: xhtml-sida som datakälla

Post by Westlund » Sun 02 Jan 2011, 20:43

Ursäkta så här ska det vara....

Decimal decValue = dsv.Value == null || dsv.Value.Length == 0 ? 0 : dsv.Value.ToDecimalByParsing();

Martin
Administrator
Administrator
Posts: 2655
Joined: Tue 09 Nov 2010, 20:25

Re: xhtml-sida som datakälla

Post by Martin » Sun 02 Jan 2011, 20:55

0.9 av webbtillägget finns uppe om ett par minuter, så slipper bunker ändra för hand ;)
Martin | Switch King

Isaksson
5 stars
5 stars
Posts: 637
Joined: Tue 09 Nov 2010, 21:51
Location: Västervik

Re: xhtml-sida som datakälla

Post by Isaksson » Sun 02 Jan 2011, 21:01

Martin wrote:0.9 av webbtillägget finns uppe om ett par minuter, så slipper bunker ändra för hand ;)
Trevligt, bra jobbat :clap:

bunker
3 stars
3 stars
Posts: 130
Joined: Thu 23 Dec 2010, 11:26

Re: xhtml-sida som datakälla

Post by bunker » Sun 02 Jan 2011, 21:27

Haha, Bunker får ändå ändra en massa mer eller mindre för hand eftersom han snickrar på touch-screen anpassningar och lite andra förbättringar av web-gui:t. Dags att ta fram diff-verktyg :-/

Post Reply

Who is online

Users browsing this forum: Google [Bot] and 16 guests