【问题标题】:parse CDATA xml解析 CDATA xml
【发布时间】:2021-07-26 09:51:21
【问题描述】:

如何在 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; 

更新: 这行得通

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 行。 我必须手动写每个人吗? Link

【问题讨论】:

标签: c# xml


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    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; }
    
        }
    

    它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 2012-09-11
      • 2012-01-19
      • 2011-01-09
      • 2011-07-06
      • 2011-11-13
      相关资源
      最近更新 更多