Xpath和XmlNameSpace

时间:2009-05-13 13:09:32

标签: .net xml xpath namespaces

我有以下XML

<?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 ...

我需要使用XmlDocument .NET类的Select(xpath_expression)方法来访问元素“ImageViewDetail”。

以下代码无效

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

除非我删除

xmlns="urn:schemas-ncr-com:ECPIX:CXF:FileStructure:020001"
来自“FileHeader”标记

这里处理命名空间的正确方法是什么?

谢谢,

2 个答案:

答案 0 :(得分:5)

在xpath中使用XmlNamespaceManager和别名:

    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);
    }

答案 1 :(得分:0)

检查http://www.vijaymukhi.com/documents/books/csclasses/chap7.htm您可能会发现可以提供帮助的内容。