Linq to XML完整的子元素XL结构

问题描述 投票:0回答:3

[我试图不使用读取xml的旧方法,并尝试linq到xml,但是我很难完成以下工作:

响应XML

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
      <PolicyResponse>
        <serviceResponse>
          <responseCode>0</responseCode>
          <responseDescription>Success</responseDescription>
          <responseDetail>Success</responseDetail>
          <paging>
            <pageNum>1</pageNum>
            <pageSize>3</pageSize>
            <totalRecords>3</totalRecords>
          </paging>
        </serviceResponse>
        <detailsResponseList>
          <detailResponse>
            <policy>
              <policySummaryInfo>
                <PolicyNumber>1199128</PolicyNumber>
                <PremiumChangeAmt>...</PremiumChangeAmt>
                <WrittenAmt>...</WrittenAmt>
                <PolicyStatusDesc>Expired</PolicyStatusDesc>
                <BillingInfo>
                  <InsuredOrPrincipal>...</InsuredOrPrincipal>
                </BillingInfo>
              </policySummaryInfo>
            </policy>
          </detailResponse>
          <detailResponse>
            <policy>
              <policySummaryInfo>
                <PolicyNumber>1199128</PolicyNumber>
                <PremiumChangeAmt>...</PremiumChangeAmt>
                <WrittenAmt>...</WrittenAmt>
                <PolicyStatusDesc>Active</PolicyStatusDesc>
                <BillingInfo>
                  <InsuredOrPrincipal>...</InsuredOrPrincipal>
                </BillingInfo>
              </policySummaryInfo>
            </policy>
          </detailResponse>
        </detailsResponseList>
      </PolicyResponse>
    </out2:getPolicySummaryResponse>
  </soapenv:Body>
</soapenv:Envelope>

我正在C#中执行此操作

XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(xmlResponse);

IEnumerable<XElement> items =
  from el in xdoc.Descendants("detailResponse")
   select el;

使用此代码,我可以读取bot detailReponse元素,但我想要的是仅保留<PolicyStatusDesc></PolicyStatusDesc>等于Active的XML detailResponse结构。那可能吗。我设法根据元素名称来收集特定数据,但是如何使用Linq to XML保持整个XML子元素结构(detailResponse元素及其子元素)。

谢谢

c# xml linq linq-to-xml
3个回答
1
投票
在您的XML示例中,无效我已删除的</out2:getPolicySummaryResponse>标签

1
投票
我经常使用下面的代码,其结果比使用序列化更平坦:

1
投票
您可以通过使用<PolicyStatusDesc>过滤Active元素,然后选择那些具有<detailResponse>值的元素来获得el.Descendants("PolicyStatusDesc")具有值Active的元素。
© www.soinside.com 2019 - 2024. All rights reserved.