/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
[.Net,C#] Skrive resultat af XPath query t~
Fra : Jesper Stocholm


Dato : 14-06-02 13:31

Jeg har noget XML, som jeg vha en XPath forespørgsel udtrækker nogle
elementer fra. Jeg vil så gerne have resultatet af dette skrevet til en
fil på disken ... men det giver mig nogle problemer, som jeg efterhånden
har stirret mig tilpas blind på, så jeg ikke længere ser helt objektivt
på det :)

Mine XML-data:

<pizzaShops>
   <!-- data ligger i filen testMerge.xml" -->
   <Shop menu_online="-1" name="s1">
       <item id="1"/>
       <item id="2"/>
   </Shop>
   <Shop menu_online="0" name="s1">
   </Shop>
</pizzaShops>

Og min kode er :

private void Page_Load(object sender, System.EventArgs e)
{
// create virtual path to XML-file that will be queried
string strCurrentPath = Request.Url.ToString();
string strXMLPath = strCurrentPath.Substring(0, strCurrentPath.LastIndexOf("/")) + "\\testMerge.xml";
string strOutPath = Request.PhysicalPath.Substring(0, Request.PhysicalPath.LastIndexOf("\\")) + "\\XPathCSharp.xml";

XmlDocument doc = new XmlDocument();
doc.Load(strXMLPath);

XmlNodeList nodeList;
XmlNode root = doc.DocumentElement;
nodeList=root.SelectNodes("descendant::pizzaShops/Shop[@menu_online='-1']");
doc.Save(Console.Out);

// create a new XmlTextReader object to fetch XML document
XmlTextReader objXTReader = new XmlTextReader(strXMLPath);
XPathDocument objXPDoc = new XPathDocument(objXTReader);
XPathNavigator objXPNav;
objXPNav = objXPDoc.CreateNavigator();
XmlReader objReader;
//
// Denne linie giver mig fejlen
// CS0029: Cannot implicitly convert type 'void' to 'System.Xml.XmlReader'
objReader = doc.LoadXml(nodeList.ToString());
//
//
objReader.MoveToContent();
outResults.Text = objReader.ReadOuterXml();
XmlTextWriter objWriter = new XmlTextWriter(strOutPath, null);
objWriter.WriteStartDocument();
objWriter.WriteEndDocument();
objWriter.Close();
}

Hvis der er nogen, der kan se, hvad der dog er galt, så vil jeg blive
meget, meget, meget glad ...

:)

--
Jesper Stocholm
http://stocholm.dk
http://asp.stocholm.dk
Svar til gruppen og ikke til mig privat pr. email :|

 
 
Jakob Andersen (18-06-2002)
Kommentar
Fra : Jakob Andersen


Dato : 18-06-02 18:46

"Jesper Stocholm" <jespers@stocholm.invalid> wrote in message
news:Xns922D93934761Bspamstocholmdk@130.226.1.34...
> Jeg har noget XML, som jeg vha en XPath forespørgsel udtrækker nogle
> elementer fra. Jeg vil så gerne have resultatet af dette skrevet til en
> fil på disken ...


Du kan få dine resultater ud ved at løbe din nodelist igennem, sådan her:

string strXml = "";
for( int i=0; i<nodeList.Count;i++){
strXml += nodeList[i].OuterXml;
}

Hvis du blot skriver nodeList.ToString() vil du jo blot få navnet på klassen
altså: "System.Xml.XPath.XPathNodeList"

To nyttige emner i Quickstart:
http://samples.gotdotnet.com/quickstart/howto/doc/Xml/QueryXmlDocumentXPath.
aspx
http://samples.gotdotnet.com/quickstart/howto/doc/Xml/WriteXMLFile.aspx

--
Jakob Andersen



Jesper Stocholm (19-06-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 19-06-02 16:44

Jakob Andersen wrote in news:aenrk4$176k$1@news.cybercity.dk:

> "Jesper Stocholm" <jespers@stocholm.invalid> wrote in message
> news:Xns922D93934761Bspamstocholmdk@130.226.1.34...
>> Jeg har noget XML, som jeg vha en XPath forespørgsel udtrækker nogle
>> elementer fra. Jeg vil så gerne have resultatet af dette skrevet til
>> en fil på disken ...
>
>
> Du kan få dine resultater ud ved at løbe din nodelist igennem, sådan
> her:
>
> string strXml = "";
> for( int i=0; i<nodeList.Count;i++){
> strXml += nodeList[i].OuterXml;
> }

se ... dette virkede ... :)

Jeg endte med denne kode:

XmlDocument doc = new XmlDocument();
doc.Load(strXMLPath);
string strXPath = "descendant::pizzaShops[Shop/@menu_online='-1']";
XmlNodeList nodeL = doc.SelectNodes(strXPath);
string strXML = "";

for (int i = 0;i<nodeL.Count;i++)
{
   strXML = strXML + nodeL[i].OuterXml;
}
outFile.Text = "<a href='" +strOutLink + "'>" + strOutLink + "</a>";
XmlTextWriter myXmlWriter = new XmlTextWriter(strOutPath,null);
myXmlWriter.Formatting = Formatting.Indented;
myXmlWriter.WriteStartDocument(true);
myXmlWriter.WriteStartElement("pizzaMenu");
myXmlWriter.WriteRaw(strXML);
myXmlWriter.WriteEndElement();
myXmlWriter.Flush();myXmlWriter.Close();

:)

Nu har jeg kun ét problem tilbage ...

Hvordan får jeg XML-filen til at have den rette encoding ? Den skulle
gerne være iso-8859-1, men jeg får fejlen

The best overloaded method match for
'System.Xml.XmlTextWriter.XmlTextWriter(string, System.Text.Encoding)'
has some invalid arguments

.... umiddelbart ser det ud til at jeg kun kan vælge ASCII,UTF-8 etc,
så den umiddelbare løsning må være, at jeg eksplicit skriver den
første linie i XML-filen ... men kan det passe ? Det virker lidt
"omvendt" ...

:)
--
Jesper Stocholm
http://stocholm.dk
http://asp.stocholm.dk
Svar til gruppen og ikke til mig privat pr. email :|

Jakob Andersen (19-06-2002)
Kommentar
Fra : Jakob Andersen


Dato : 19-06-02 18:45

Jesper Stocholm wrote:
> Hvordan får jeg XML-filen til at have den rette encoding ? Den skulle
> gerne være iso-8859-1, men jeg får fejlen

..NET understøtter desværre ikke andre encodings end dem der er nævnt her:
<http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemtextencodingc
lasstopic.asp>

--
Jakob Andersen



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste