与 linq 的特定值

本文关键字:linq | 更新日期: 2023-09-27 18:32:52

我有一个xml文件,我想从中提取一些数据。

我有这个 linq 查询,我在 var 中获取详细信息,但我无法达到值。

XNamespace aw1 = "http://www.stackoverflow.com/FAQ/";
var r03 = from el in obj.Descendants().Elements(aw1 + "co")
                                select el.Elements(aw1 + "doc");

尝试使用循环,但我得到一个转换错误,我认为有一种直接的方法可以获取值,我试图避免循环,因为我们总是知道结构,没有必要解析整个文件并得到我正在寻找的东西。

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header>
    <wsse:Security S:mustUnderstand="1" xmlns:wsse="http://docs.org/wss/2004/secext-1.0.xsd">
      <wsu:Timestamp xmlns:wsu="http://docs.org/utility-1.0.xsd">
        <wsu:Created>2016-01-28T21:54:57Z</wsu:Created>
      </wsu:Timestamp>
    </wsse:Security>
  </S:Header>
  <S:Body>
    <ConsultarEdocumentResponse xmlns:ns2="http://www.stackoverflow.com/" xmlns="http://www.stackoverflow.com/FAQ/">
      <response>
        <mensaje>No Message</mensaje>
        <resultadoBusqueda>
          <co>
            <doc>151AQP</doc>
            <patentes>
              <patente>1111</patente>
            </patentes>
            <facturas>
              <factura>
              <subdivision>0</subdivision>
              <mercancias>
                <mercancia>
                  <desc>ACCESORIO</desc>
                  <cantidad>189000</cantidad>
                </mercancia>
                <mercancia>
                  <desc>ACCESORIO A</desc>
                  <cantidad>9000</cantidad>
                </mercancia>
              </mercancias>
              </factura>
            </facturas>
            <emisor>
              <tipoIdentificador>0</tipoIdentificador>
              <domicilio>
                <calle>STREET</calle>
                <codigoPostal>55555</codigoPostal>
              </domicilio>
            </emisor>
            <destinatario>
              <tipoIdentificador>1</tipoIdentificador>
              <domicilio>
                <calle>Street</calle>
                <codigoPostal>65555</codigoPostal>
              </domicilio>
            </destinatario>
          </co>
        </resultadoBusqueda>
      </response>
    </ConsultarEdocumentResponse>
  </S:Body>
</S:Envelope>

请帮我解决这个问题,我一直在尝试几件事,但我觉得我没有得到任何有用的东西。提前谢谢你。

与 linq 的特定值

LinqToXML确实是一个很棒的库,但是SOAP太糟糕了,以至于LinqToXML也很糟糕。看起来您混合了一些 XML 命名空间:

        XDocument xdoc = XDocument.Parse(xml);
        XNamespace soapNs = "http://schemas.xmlsoap.org/soap/envelope/";
        XNamespace soNs = "http://www.stackoverflow.com/FAQ/";
        var docList = xdoc.Root.Descendants(soapNs + "Body")
            .Descendants(soNs + "co")
            .Descendants(soNs + "doc")
            .ToList();
        docList.ForEach(x => Console.WriteLine(x.Value));

有关详细信息,请查看此 SO 问题:使用 LINQ to XML 解析 SOAP 消息