PDA

Vollständige Version anzeigen : XML-Tags editieren mit C#


salzlos
18.09.2003, 17:00
Hallo!

Das auslesen von XML mit C# funktioniert ja ziemlich easy.
Nun möchte ich in einer XML-Datei den Inhalt eines Tags ändern,
bekomme jedoch immer wieder eine Fehlermeldung, mit der ich nichts anzufangen weiß:

Ausnahmedetails: System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Quellfehler :

Zeile 15:
Zeile 16: XmlNode node = doc.SelectSingleNode(strXpath);
Zeile 17: node.InnerText = strStat;
Zeile 18:
Zeile 19: doc.Save(myFile);

Quelldatei: c:\inetpub\wwwroot\Project01\edit.aspx Zeile: 17


Im folgenden mein XML-File

<?xml version="1.0" encoding="utf-8"?>
<projects xmlns="http://localhost/crmgProjects/prjct.xsd">
<project>
<name>irgendein ProjektName</name>
<desc>kann mir mal jemand sagen, was das hier mit dem Text soll? Wie viel kommt hier rein? Und... reichen 4 Zeilen?</desc>
<status>gn</status>
<date>12.05.2003</date>
<time>09:23</time>
<work>
<item id="1">
Im Moment bereiten wir die Inhalte für diesen Bereich vor. Um Sie auf
gewohntem Niveau informieren zu können, werden wir noch ein wenig Zeit
benötigen. Bitte schauen Sie daher bei einem späteren Besuch noch einmal auf
dieser Seite vorbei. Vielen Dank für Ihr Interesse!
</item>
</work>
</project>
</projects>


Also eigentlich ganz simpel aufgebaut.
Nun versuche ich mit folgendem Code darauf zuzugreifen:


<% @Page Language="C#" Debug='true' %>
<% @ Import Namespace="System.Xml" %>
<% @ Import Namespace="System.Xml.XPath" %>

<%

String myFile = Page.MapPath("prjct2.xml");

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

String strElement = "status";
String strStat = "rt";
String strXpath = "/projects/project/desc";

XmlNode node = doc.SelectSingleNode(strXpath);
node.InnerText = strStat;

doc.Save(myFile);

%>
<html>
<head></head>
<body>
<%
Response.Write(strXpath);
%>
<br /><br /><br /><br />
<h1>okay</h1
</body>
</html>




Ich habe schon alles mögliche probiert, komme aber nicht wirklich weiter.
Ist das nun wieder mal eine typische MS-Fehlermeldung,
oder fehlt mir einfach Hintergrundwissen?

Kann hier wer helfen?
Gruß
Tom

Gast
11.03.2004, 18:52
Hallo Tom!

Bei mir hat folgendes geholfen:

Nach der Zeile mit
doc.Load(myFile);
einen NamespaceManager einfügen:
XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable);
nsManager.AddNamespace("tom", "http://localhost/crmgProjects/prjct.xsd");

Die Zeile mit der XPath-Bedingung auf den Namespace anpassen:
String strXpath = "tom:/projects/project/desc";

Und dann bei der Abfrage den Namespacemanager mitübergeben.
XmlNode node = doc.SelectSingleNode(strXpath, nsManager);

Gruß!

Onkellepie
11.04.2006, 15:55
Hi hab fast das gleiche Problem wie Tom aber bei mir hilft die Lösung nicht! Denn ich möchte kein Präfix bei xmlnx verwenden also sieht das dann so aus

xmlns="http://vielSpass.de";

jetzt möchte ich die Daten aber trotzdem auslesen durch SelectSingelNode, das sieht dann so aus:

SelectSingleNode(projects/project/name).innertext;

Das funzt aber nicht weil er mir dann sagt das das Objekt nicht instanziiert wurde!
Also das Probiert mit dem msmanager, sieht dann so aus:

SelectSingleNode(:/projects/project/name,msmanager).innertext;

Da sagt er mir aber: Ungültiger token! Er nimmt den ":" nicht an!
Nun isses Aber so das ich ja aber den Namespace "xmlns="http://vielSpass.de"" habe und damit jetzt auch arbeiten will!
Also gibts ne Möglichkeit irgendwie an die Daten ranzukommen wenn ich nen Namespace habe ohne Präfix?

Danke schonmal