Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Corretta XPath per ricavare un nodo da XmlDocument

    Allora,

    ho un problema a selezionare un nodo un XmlDocument. Questa è parte del mio xml:

    
    codice:
    <Root>
       <Object>
       ....
       </Object>
    
       <Queries>
           
           <Query Use="INSERT">
           ....
           </Query>
           <Query Use="...">
           ....
          </Query>
          ......
        </Queries>
    </Root>
    Ora, lo leggo con XmlDocument
    
    codice:
    XmlDocument doc = new XmlDocument();
    doc.Load(mioFileXML);
    ora non riesco proprio a capire come selezionare la Query con attributo Use="Insert" usando il XmlDocument.SelectSingleNode... tutti i miei tentativi sono miseramente falliti, nonostante le decide di pagine lette su web. Qualcuno è in grado di illuminare la mia ignoranza? Qualsiasi SelectSingleNode che abbia provato (con XPath) diverse, ritorna sempre Null. XmlDocument è correttamente riempito con il mio XML

    grazie
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559


    prova cosi:

    mioDoc.SelectSingleNode("//Query[@Use='Insert']");
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  3. #3
    non va:

    
    codice:
     string xpath = "//Query[Use='Insert']";
    
     XmlNode xmlQuery = _xmlDoc.SelectSingleNode(xpath);
     if (xmlQuery == null) throw new LoaderException("No query founded with use "+queryUse);
    non va, mi viene lanciato sempre l'errore. ho provato anche in altri modi, ho letto ad esempio che per riferirsi ad un attributo si deve usare la @ quindi

    //Query[@Use='Insert']

    //Root/Queries/Query[@Use='Insert']

    //Root/Queries/Query[Use='Insert']


    ma niente, il SelectSingleNode mi restituisce sempre nulla, eppure nell'ispezione di _xmlDoc, l'innerXml è correttamente valorizzato col mio xml


    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    ops...
    mi sa ke avevo visto male!!



    mioDoc.SelectSingleNode("//Query[@Use='INSERT']");

    TUTTO MAIUSCIOLO
    (l'xml è totalmente case sensitive)

    spero stavolta vada meglio!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  5. #5
    Allora, ho capito dov'è il problema.

    il file xml ha la root così:

    <Root xmlns="http://tempuri.org/Prova.xsd">
    ...

    perchè l'ho collegato ad un xmlSchema, Prova.xsd appunto, che mi serve per validarlo. Senza quella dicitura nella root, il documento xml viene validato sempre anche se in presenza di contrasti con lo schema, altrimenti funziona tutto.

    Il problema è che con l'attributo xmlns, non funzionano le query con XPath.

    Ho visto alcuni usare qualcosa tipo NameSpaceManager, però non so assolutamente come impostarlo.

    Idee?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Ok ho risolto, riporto la procedura completa per i posteri


    file xml:
    
    codice:
    <Root xmlns="urn:model-schema">
    ...
    ...
    <Query Use="INSERT">...</Query>
    ...
    ...
    </Root>
    lo valido e lo leggo
    codice:
    
    XmlSchemaSet schema = new XmlSchemaSet();
    schema.Add("urn:model-schema",pathFileXSD);
    
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas.Add(schema);
    settings.IgnoreWhitespace=true;
    settings.IgnoreComments=true;
    settings.ValidationEventHandler += new ValidationEventHandler(//handler);
    
    //per validare l'xml si può o creare un XmlReader con queste settings e poi
    //leggerlo tutto, oppure dovrebbe bastare creare l'XmlDocument
    
    XmlDocument doc = new XmlDocument();
    doc.Load(XmlReader.Create(pathFileXml, settings));
    
    XmlNamespaceManager nsmgr = new XmlNamespaceManager()
    nsmgr.AddNamespace("yourprefix","urn:model-schema");
    
    XmlNode node= doc.SelectSingleNode("//yourprefix:Query[@Use='INSERT']",nsmgr);
    
    if(node!=null)
       MessageBox.Show(node.OuterXml);

    naturalmente come xmlns potete mettere quello che piu ritenete opportuno


    grazie per l'attenzione e l'aiuto
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.