RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1186233
Accepted
icedev
icedev
Asked:2020-10-05 16:49:22 +0000 UTC2020-10-05 16:49:22 +0000 UTC 2020-10-05 16:49:22 +0000 UTC

C# + XPath 元素搜索

  • 772

第二天,我在使用 XPath 解析 xml 时遇到了困难,我寻求帮助。

有一个源xml文件:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <S:Body>
    <ns2:getDocSaleListResponse xmlns:ns2="http://services.ru/">
      <ns2:list>
        <ns2:nsaID>100397431</ns2:nsaID>
        <ns2:id>7785846</ns2:id>
        <ns2:shiftID>89800</ns2:shiftID>
        <ns2:docDate>2020-08-02T23:49:43.961+03:00</ns2:docDate>
        <ns2:docNo>7785846</ns2:docNo>
        <ns2:entityCreator>STATION</ns2:entityCreator>
        <ns2:userName>Швабра</ns2:userName>
        <ns2:dateDef>2020-10-02T03:00:06.539+03:00</ns2:dateDef>
        <ns2:direction>NORMAL_DIRECTION</ns2:direction>
        <ns2:goodsDetails>
          <ns2:articleID>9990000001562</ns2:articleID>
          <ns2:azsID>100397431</ns2:azsID>
          <ns2:id>84514</ns2:id>
          <ns2:shiftID>89800</ns2:shiftID>
          <ns2:barcode>46214829</ns2:barcode>
          <ns2:basePrice>113.00</ns2:basePrice>
          <ns2:baseSum>113.00</ns2:baseSum>
          <ns2:dmcode>00000046214829uD&amp;Y&lt;7?AB9UFb/p</ns2:dmcode>
          <ns2:hostname>mksrv1</ns2:hostname>
          <ns2:multiplier>1</ns2:multiplier>
          <ns2:position>1</ns2:position>
          <ns2:quantity>1.000</ns2:quantity>
          <ns2:serialNumber>0327260006003759</ns2:serialNumber>
          <ns2:tradePrice>113.00</ns2:tradePrice>
          <ns2:tradeSum>113.00</ns2:tradeSum>
          <ns2:unitName>шт</ns2:unitName>
          <ns2:wdChunkSum>0.00</ns2:wdChunkSum>
        </ns2:goodsDetails>
        <ns2:hostName>mksrv1</ns2:hostName>
        <ns2:loyalityTerminalID>0</ns2:loyalityTerminalID>
        <ns2:loyaltyProcessingID>888</ns2:loyaltyProcessingID>
        <ns2:loyatyCardNumber/>
        <ns2:motherSale>0</ns2:motherSale>
        <ns2:motherSaleStateID>0</ns2:motherSaleStateID>
        <ns2:motherShiftID>0</ns2:motherShiftID>
        <ns2:payCardNo/>
        <ns2:payState>TRANSPAYSTATE_DONE</ns2:payState>
        <ns2:payTime>TRANSPAYTIME_PREPAY</ns2:payTime>
        <ns2:paymentProcessingID>100</ns2:paymentProcessingID>
        <ns2:paymentTerminalID>0</ns2:paymentTerminalID>
        <ns2:prevSaleStateId>0</ns2:prevSaleStateId>
        <ns2:saleBornSource>SALEBORNSOURCE_OPERATOR</ns2:saleBornSource>
        <ns2:saleID>7785790</ns2:saleID>
        <ns2:saleState>TRANS_ST_EXECUTED</ns2:saleState>
        <ns2:wholeDiscount>0.00</ns2:wholeDiscount>
      </ns2:list>
    </ns2:getDocSaleListResponse>
  </S:Body>
</S:Envelope>

ns2:list可以有几个块

得到他们

XmlDocument xml = new XmlDocument();
xml.LoadXml(result);
XmlElement xRoot = xml.DocumentElement;
XmlNodeList items = xml.GetElementsByTagName("ns2:list");
XmlNamespaceManager xs = new XmlNamespaceManager(xml.NameTable);
xs.AddNamespace("ns2", "http://schemas.xmlsoap.org/soap/envelope/");     

接下来,我们尝试拉出嵌套的节点

foreach (XmlNode cx in items)
{
    string docDate = cx.SelectSingleNode("ns2:docDate").InnerText;
    Console.WriteLine(docDate);
}

无论我如何尝试,我都无法获取参数的值。如果我放置而不是节点名称"*",则返回嵌套节点的完整列表。不想按名字搜索。告诉我是什么原因。

c#
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Vasek
    2020-10-05T17:24:28Z2020-10-05T17:24:28Z
    1. 您的命名空间未正确指定,而不是http://schemas.xmlsoap.org/soap/envelope/您需要http://services.ru/
    2. 要使 SelectSingleNode 工作,您需要将 XmlNamespaceManager 传递给它

    全部的:

    var sampleXml = @"
         <S:Envelope xmlns:S=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"">
           <SOAP-ENV:Header/>
           <S:Body>
              <ns2:getDocSaleListResponse xmlns:ns2=""http://services.ru/"">
                 <ns2:list>
                    <ns2:nsaID>100397431</ns2:nsaID>
                    <ns2:id>7785846</ns2:id>
                    <ns2:shiftID>89800</ns2:shiftID>
                    <ns2:docDate>2020-08-02T23:49:43.961+03:00</ns2:docDate>
                 </ns2:list>
                 <ns2:list>
                    <ns2:nsaID>100397431</ns2:nsaID>
                    <ns2:id>7785846</ns2:id>
                    <ns2:shiftID>89800</ns2:shiftID>
                    <ns2:docDate>2020-08-02T23:49:43.961+03:00</ns2:docDate>
                 </ns2:list>
           </ns2:getDocSaleListResponse>
           </S:Body>
        </S:Envelope>
    ";
    
    XmlDocument xml = new XmlDocument();
    xml.LoadXml(sampleXml);
    
    XmlNamespaceManager xnsm = new XmlNamespaceManager(xml.NameTable);
    xnsm.AddNamespace("ns2", "http://services.ru/");
    
    XmlNodeList items = xml.GetElementsByTagName("ns2:list");
    
    foreach (XmlNode cx in items) {
        var docDateNode = cx.SelectSingleNode("ns2:docDate", xnsm);
        string docDateValue = docDateNode.InnerText;
        Console.WriteLine(docDateValue);
    }
    
    • 2

相关问题

  • 使用嵌套类导出 xml 文件

  • 分层数据模板 [WPF]

  • 如何在 WPF 中为 ListView 手动创建列?

  • 在 2D 空间中,Collider 2D 挂在玩家身上,它对敌人的重量相同,我需要它这样当它们碰撞时,它们不会飞向不同的方向。统一

  • 如何在 c# 中使用 python 神经网络来创建语音合成?

  • 如何知道类中的方法是否属于接口?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5