Toon posts:

[ASP.Net / SQL Server] Ophalen en wegschrijven XML

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedemiddag,

Ik zit met het volgende probleem: In een 3-tier webapplicatie wil ik data uit SQL Server wegschrijven naar XML zodat ik mbv XSLT aan de presentatie kant kan kiezen hoe ik zaken wil weergeven.
De applicatie wordt geschreven in C# (.Net 1.1) en het betreft SQL Server 2000.

Hieronder geef ik weer hoe er per laag met de data wordt omgegaan:
code:
1
2
3
4
5
  SELECT 
    ...
  FROM #tmp
    
  FOR XML EXPLICIT


DAL
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public XPathDocument getImbalancePriceXMLByDate(DateTime startDate, DateTime endDate)
    {
      //Vars
      XmlReader xmlReader = null;
      XPathDocument xpathDoc = null;

      //set up connection
      SqlConnection myConnection = new SqlConnection(_connStr);
      
      //create sql command for stored procedure
      SqlCommand myCommand = new SqlCommand("uspCreateXMLImbalancePriceByDate", myConnection);
      myCommand.CommandType = CommandType.StoredProcedure;      

      //Add parameters
      myCommand.Parameters.Add("@strFromDate", SqlDbType.DateTime).Value = startDate;
      myCommand.Parameters.Add("@strUntilDate", SqlDbType.DateTime).Value = endDate;

      try
      {
        myConnection.Open();

        xmlReader = myCommand.ExecuteXmlReader();
        xpathDoc = new XPathDocument(xmlReader, XmlSpace.Preserve);
      }
      catch (Exception ex)
      {
        throw (ex);
      }
      finally
      {
        myConnection.Close();
      }

      return xpathDoc;
    }


BL
C#:
1
2
3
4
5
public XPathDocument getImbalancePriceXMLByDate(DateTime startDate, DateTime endDate)
    {
      XPathDocument xml = data.getImbalancePriceXMLByDate(startDate, endDate);
      return xml;
    }


Er wordt daadwerkelijk data opgehaald uit SQL Server en deze wordt weggeschreven
C#:
1
XmlTextWriter writer = new XmlTextWriter(xmlLocation, Encoding.UTF8);

naar de harde schijf.

Maar de inhoud van dit bestand is niet echt wat ik verwacht:
XML:
1
2
3
<NewDataSet>
  <ImbalancePrice>
    <XML_F52E2B61-18A1-11d1-B105-00805F49916B>


Schijnbaar doe ik ergens iets verkeerd (het ligt niet aan de gekozen encoding bij het wegschrijven). Google levert wel enkele resultaten op, maar helaas geen oplossingen. Heeft iemand hier enige ervaring mee?

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:54
Hoe schrijf je dat precies weg ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Mmmhh.. Ik zie inderdaad dat ik net dat stukje ben vergeten.. Komt ie:
C#:
1
2
 
 writer.WriteString(getImbalancePriceXMLStringByDate(date, date));

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:54
Aha, je schrijft een string weg, en niet zozeer de nodes. Ik bedoel: De XmlWriter gaat de waardes die je naar WriteToString stuurt, niet zozeer als xml zien, maar als een waarde. WriteString kan je gebruiken om een 'value' van een xml element / node weg te schrijven.
Als je in de MSDN kijkt, zie je ook dat deze opmerking bij WriteString staat:
Remarks
WriteString does the following

The characters &, <, and > are replaced with &, <, and >, respectively.
Character values in the range 0x-0x1F (excluding white space characters 0x9, 0x10, and 0x13) are replaced with numeric character entities (� through �x1F).
If WriteString is called in the context of an attribute value, double and single quotes are replaced with " and ' respectively.
For example, this input string testtest is written as

test<item>test

If text is either a null reference (Nothing in Visual Basic) or String.Empty, this method writes a text node with no data content.
Je zult dus WriteStartElement, etc... moeten gebruiken. Echter, aangezien je alle gegevens al als xml uit de DB krijgt, zal dat dus ws niet lukken.
Kan je de xml die je verkregen hebt niet in een dataset laden, en deze dan wegschrijven (WriteXml) ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Mmhh... *schaam*.. Volgende keer idd beter in MSDN kijken...
Maar dan moet ik dus door de DAL en BL de data niet als XPathDocument maar "gewoon" als DataView doorgeven?

Verwijderd

Topicstarter
Goed... Ik laad de xml in een dataset en schrijf deze vervolgens weg naar bestand... Alleen de inhoud van het bestand is als volgt:
XML:
1
2
3
4
5
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <ImbalancePrice>
    <XML_F52E2B61-18A1-11d1-B105-00805F49916B>&lt;IMBALANCE_PRICE&gt;&lt;VALUE DATE="20020511"&gt;&lt;PTU&gt;1&lt;/PTU&gt;
.....etc


Gaat dus al meer de goede kant op, maar dit is nog steeds niet wat ik moet hebben.
Ik verwacht <imbalance_price>...</imbalance_price>... etc...
Pagina: 1