2011-01-06 14 views
0

Betrachten Sie das folgende XmlDocument mit Namensräumen:Read/Write XmlDocument mit Namespaces

<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"> 
    <DataSources> 
    <DataSource Name="DummyDataSource"> 
     <rd:DataSourceID>a0a7ff0a-a268-4f7e-b949-9427e308468a</rd:DataSourceID> 
     <ConnectionProperties> 
     <DataProvider>SQL</DataProvider> 
     <ConnectString /> 
     </ConnectionProperties> 
    </DataSource> 
    </DataSources> 
</Report> 

Ich schrieb,

Dim doc As New XmlDocument 
doc.Load("c:\MyXml.xml") 
Dim nsm As New XmlNamespaceManager(doc.NameTable) 
nsm.AddNamespace("", "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition") 
nsm.AddNamespace("rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner") 
Dim xnd As XmlNode = doc.SelectSingleNode("//DataSources/DataSource/...", nsm) 
MessageBox.Show(xnd.Name) 

Ich möchte lesen und ändern Werte von Tags (XPath):

  1. //DataSources/DataSource/rd:DataSourceID
  2. //DataSources/DataSource/ConnectionProperties/DataProvider
+4

Und was ist das Problem, das Sie haben? Welche Fehler? Welche Ausnahmen? – Oded

+0

Bitte sagen Sie mir, wie? –

+1

Und was funktioniert gerade nicht mit dem Code, den Sie haben? – Oded

Antwort

-1

Sie müssen diese XPath-Formate verwenden, und umfassen die Namespace-uri() - das ist ein Schmerz im Nacken:

//DataSources[namespace-uri()='']/DataSource[namespace-uri()='']/... 
+0

-1 Ich glaube nicht, Namespace-URI ist notwendig. Definieren Sie ein Präfix für den Standardnamespace, und verwenden Sie es stattdessen. –

+0

Du gibst Downvote, nur weil du denkst? Du meinst, du hast es gar nicht versucht ?! – Aliostad

+0

Ich habe Ihnen keinen Downvote gegeben. Ich öffne diese Antwort jetzt nur. Komm mir nicht böse auf dich .. Sag mir bitte, was soll ich jetzt machen? –

0

Meine Präferenz wäre LINQ to XML verwenden und dann lesen Das Element verwendet einen richtigen XName anstelle einer Zeichenfolge. Etwas wie:

Dim defaultSpace As XNamespace = XNamespace.Get("http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition")  
Dim firstSource As XElement = doc.Element(defaultSpace + "DataSources").Element(defaultSpace + "DataSource")