【问题标题】:Xpath and XmlNameSpaceXpath 和 XmlNameSpace
【发布时间】:2009-05-13 13:09:31
【问题描述】:

我有以下 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"

来自“文件头”标签

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

谢谢,

【问题讨论】:

  • 我为您格式化了您的 XML,因此没有水平滚动。我多么讨厌水平滚动。
  • @Welbog - 老实说,我更喜欢原版;现在我有垂直滚动了;-p 但是任何一个都足够了......
  • @ala - 顺便说一句,ImageViewDetail 看起来不在 AddendA 内,所以 /AddendA/ImageViewDetail 无论如何都不会工作......
  • @Gravell,你说得对。我的错误。正确的 xpath 是 //x:Item/x:ImageViewDetail。谢谢大家

标签: .net xml xpath namespaces


【解决方案1】:

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

【讨论】:

  • 有没有办法在不添加别名的情况下执行原始xpath?
【解决方案2】:

查看http://www.vijaymukhi.com/documents/books/csclasses/chap7.htm,您可能会发现一些有用的东西。

【讨论】:

    猜你喜欢
    • 2012-03-13
    • 2023-03-23
    • 2014-10-14
    • 2011-05-09
    • 2012-06-20
    • 2011-02-17
    • 2011-07-20
    • 1970-01-01
    相关资源
    最近更新 更多