代码之家  ›  专栏  ›  技术社区  ›  user805528

c#XMLDocument值到列表/数组[重复]

  •  -1
  • user805528  · 技术社区  · 1 年前

    我知道有很多同样的问题,但我无法解决这个问题。 我有一个XMLDocument,我需要迭代这些值。

            <InfoResponse xmlns="">
               <ns1:ID xmlns:ns1="http://www.svt.si/evlog">2399237000/03-069-1-41/2023</ns1:ID>
               <ns1:ID xmlns:ns1="http://www.svt.si/evlog">2399237000/03-069-1-42/2023</ns1:ID>
            </InfoResponse>
    

    我尝试过IEnumerable、XmlNodelist、List,但总是得到相同的结果。

    XmlDocument xmlDocument = new XmlDocument();
    xmlDocument.LoadXml(response);
    
    String test = xmlDocument.InnerText;
    

    退货

    2399237000/03-069-1-41/20232399237000/03-069-1-42/2023
    

    我需要一个数组或列表,这样我就可以迭代并执行下一个操作。

    我尝试了建议的解决方案 How do I read and parse an XML file in C#? 但结果是一样的。我认为问题在于它们都有相同的节点名称/id。

    编辑 正如建议的那样,命名空间ns1可能没有定义,所以这是我得到的整个字符串响应:

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/>
        <soap:Body>
            <InfoResponse xmlns="">
                <ns1:ID xmlns:ns1="http://www.svt.si/evlog">2399237000/03-069-1-41/2023</ns1:ID>
                <ns1:ID xmlns:ns1="http://www.svt.si/evlog">2399237000/03-069-1-42/2023</ns1:ID>
            </InfoResponse>
        </soap:Body>
    </soap:Envelope>
    

    这个回答可以吗?

    我在foreach中添加了建议的解决方案——目前我不确定我是否正确地完成了它:

    string[] strArray = XElement.Parse(response)
                            .Elements()
                            .Select(d => d.Value)
                            .ToArray();
    
    foreach (string xn in strArray)
    {
        Logger.LogInfo("ID: " + xn);
    }
    

    现在返回2个元素-一个为空,另一个同时具有这两个值。

    编辑2

            string[] strArray = XElement.Parse(soapResponse)
                                        .Descendants("InfoResponse")
                                        .Elements()
                                        .Select(d => d.Value)
                                        .ToArray();
    

    返回一个空数组。。

    0 回复  |  直到 1 年前
        1
  •  1
  •   Serge    1 年前

    使用Linq总是更容易

    string[] test = XElement.Parse(response)
                                .Descendants("InfoResponse")
                                .Elements()
                                .Select(d => d.Value)
                                .ToArray();