繁体   English   中英

解析 CDATA xml

[英]parse CDATA xml

我如何在 CDATA 中获得价值?

我所拥有的:它是字符串我想解析它并获得像 NOM_VAG 和其他的值

<?xml version="1.0" encoding="windows-1251"?>
<GetInformReply><Inform_ID>-14</Inform_ID><ASOUPReply>
<![CDATA[<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getReferenceSPV4664Response xmlns:ns2="http://service.siw.pktbcki.rzd/">
<return><referenceSPV4664><row><NOM_VAG>75142901</NOM_VAG><ROD_VAG_UCH>70</ROD_VAG_UCH><KOD_SOB>20</KOD_SOB><DATE_NACH xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/><STAN_NACH>0</STAN_NACH><DOR_NACH>0</DOR_NACH><STR_NACH>0</STR_NACH><DATE_KON xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/><STAN_NAZN>612003</STAN_NAZN><DOR_NAZN>61</DOR_NAZN><STR_NAZN>643</STR_NAZN><GRUZPOL>4232</GRUZPOL><GRUZPOL_OKPO>0000000000</GRUZPOL_OKPO>
</row></referenceSPV4664><amount>1</amount><amountRF>1</amountRF><amountNotRF>0</amountNotRF><codeTypeObject>1</codeTypeObject><returnCode>0</returnCode><errorCode>0</errorCode><errorMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/><title>Справка о дислокации вагона</title><dateIzm xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/></return></ns2:getReferenceSPV4664Response></S:Body>
</S:Envelope>
]]>
 </ASOUPReply></GetInformReply>

我需要在 CDATA 之间解析 xml

What I did:
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(xmlText);
XmlElement xRoot = xDoc.DocumentElement;
xRoot.GetElementsByTagName("<![CDATA[]]>");
foreach (XmlNode item in xRoot)
    {
        if (item.LocalName == "ASOUPReply")
    {
        XmlNode attr = item.Attributes.GetNamedItem("row");
        foreach (var itemXMl in ((System.Xml.XmlCharacterData)item.LastChild).Data)
        {
                            
        }
return xmlText; 

UPD:这有效

public void pp (string text)
        {
            XDocument xml = XDocument.Parse(text);
            var soapResponse = xml.Descendants().Where(x => x.Name.LocalName == "row").Select(x => new SPR4664()
            {
                NOM_VAG = (string)x.Element(x.Name.Namespace + "NOM_VAG"),
                ROD_VAG_UCH = (string)x.Element(x.Name.Namespace + "ROD_VAG_UCH"),
            }).FirstOrDefault();
        }

模型:

public class SPR4664
    {
        public string NOM_VAG { get; set; }
        public string ROD_VAG_UCH { get; set; }

    }

但我有大约 30 行。 我必须手动写每个人吗? 关联

选择ASOUPReply元素节点,读出其InnerText ,将其提供给第二个XmlDocumentLoadXml方法(您可能需要消除 XML 声明之前的任何空格),然后选择NOM_VAG元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM