2009-05-13 9 views
4

j'ai le code XML suivantXpath et XMLNamespace

<?xml version="1.0"?> 
<FileHeader 
    xmlns="urn:schemas-ncr-com:ECPIX:CXF:FileStructure:020001" 
    VersionNumber="020001" 
    TestFileIndicator="P" 
    CreationDate="13012009" 
    CreationTime="172852" 
    FileID="0000000001" 
> 
    <Item 
    ItemSeqNo="09011340010009" 
    PayorBankRoutNo="00704524" 
    Amount="398000" 
    AccountNo="000003850010205" 
    SerialNo="000512" 
    TransCode="03" 
    PresentingBankRoutNo="00400019" 
    PresentmentDate="13012009" 
    CycleNo="01" 
    NumOfImageViews="2" 
    ClearingType="01" 
    DocType="D" 
    CurrencyInd="LYD" 
    IQAIgnoreInd="0" 
    CashValueInd="1" 
    TruncatingRTNo="00405117" 
    SpecialHandling="00" 
    RepresentmentCnt="0" 
    MICRRepairFlags="000000" 
    > 
    <AddendA 
     BOFDRoutNo="00400019" 
     BOFDBusDate="13012009" 
     DepositorAcct="0000534983" 
    /> 
    <ImageViewDetail ... 

Et je dois atteindre l'élément "ImageViewDetail" en utilisant la méthode de sélection (xpath_expression) de XmlDocument classe .NET.

Le code suivant ne fonctionne pas

xmlDocument.Select("//Item/AddendA/ImageViewDetail"); 

à moins que je supprimer

xmlns="urn:schemas-ncr-com:ECPIX:CXF:FileStructure:020001" 

de tag "FileHeader"

Quelle est la bonne façon de traiter avec espace de noms ici?

Merci,

+1

Je formaté votre XML pour vous donc il n'y a pas de défilement horizontal. Comme je déteste le défilement horizontal. – Welbog

+0

@Welbog - pour être honnête, j'ai préféré l'original; maintenant j'ai le défilement vertical à la place ;-p Mais soit suffira ... –

+1

@ala - btw, le ImageViewDetail ne semble pas être dans l'AddendA, donc/AddendA/ImageViewDetail ne fonctionnera pas de toute façon ... –

Répondre

5

Avec un XmlNamespaceManager et un alias dans le XPath:

XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable); 
    mgr.AddNamespace("x", doc.DocumentElement.NamespaceURI); 
    foreach (XmlNode node in doc.SelectNodes(
      "//x:Item/x:AddendA/x:ImageViewDetail", mgr)) 
    { 
     Console.WriteLine(node.OuterXml); 
    } 
+0

existe-t-il un moyen d'exécuter xpath d'origine, sans y ajouter d'alias? – vittore