簡體   English   中英

解碼XML字符串

[英]Decoding XML String

我在解碼某些編碼的xml時遇到問題。

我收到“未處理XmlException:根級別的數據無效。第1行位置1”

<argo-response status="1" status-id="INFO">
  <messages>
    <message message-id="INFO" message-severity="INFO" message-text="[class-name:LBCTSubmitInGateDataWebService]" message-detail="[class-name:LBCTSubmitInGateDataWebService]" />
    <message message-id="GROOVY_RESULT" message-severity="INFO" message-text="Result: &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;&#xA;&lt;lbct:submit-ingate-data-response xmlns='(Had to remove link)' xmlns:xsi='(Had to remove link)' xmlns:lbct='(Had to remove link)' lbct:message-id='789637546382669' lbct:message-date='2014-01-23T06:37:32.0Z' lbct:facility-id='LBCT' lbct:complex-id='LBCT' lbct:sender='TOS'&gt;&#xA;  &lt;lbct:create-truck-visit-response&gt;&amp;lt;![CDATA[&amp;lt;argo:gate-response xmlns:argo=&quot;(Had to remove link)&quot; xmlns:xsi=&quot;(Had to remove link)&quot; xsi:schemaLocation=&quot(Had to remove link)&quot;&amp;gt;&amp;lt;create-truck-visit-response&amp;gt;&amp;lt;truck-visit tv-key=&quot;52947590&quot; gos-tv-key=&quot;123&quot; tracking-tag-id=&quot;98765432&quot; is-internal=&quot;false&quot; next-stage-id=&quot;ingate&quot; status=&quot;OK&quot; gate-id=&quot;LBCT&quot; entered=&quot;2014-01-23T05:47:28&quot;&amp;gt;&amp;lt;trucking-co id=&quot;WNWI&quot; /&amp;gt;&amp;lt;truck id=&quot;98765432&quot; tag-id=&quot;98765432&quot; license-nbr=&quot;D98765432&quot; /&amp;gt;&amp;lt;chassis-profile id=&quot;40&quot; /&amp;gt;&amp;lt;driver card-id=&quot;98765432&quot; driver-name=&quot;LICENSEABC&quot; /&amp;gt;&amp;lt;/truck-visit&amp;gt;&amp;lt;/create-truck-visit-response&amp;gt;&amp;lt;/argo:gate-response&amp;gt;]]&amp;gt;&lt;/lbct:create-truck-visit-response&gt;&#xA;  &lt;lbct:process-truck-response&gt;&amp;lt;![CDATA[Unknown IN lane LANE20 for gate LBCT&amp;lt;argo:gate-response xmlns:argo=&quot;(Had to remove link)&quot; xmlns:xsi=&quot;(Had to remove link)&quot; xsi:schemaLocation=&quot;(Had to remove link)&quot;&amp;gt;&amp;lt;process-truck-response /&amp;gt;&amp;lt;/argo:gate-response&amp;gt;]]&amp;gt;&lt;/lbct:process-truck-response&gt;&#xA;&lt;/lbct:submit-ingate-data-response&gt;" message-detail="Result: &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;&#xA;&lt;lbct:submit-ingate-data-response xmlns='(Had to remove link)' xmlns:xsi='(Had to remove link)' xmlns:lbct='(Had to remove link)' lbct:message-id='789637546382669' lbct:message-date='2014-01-23T06:37:32.0Z' lbct:facility-id='LBCT' lbct:complex-id='LBCT' lbct:sender='TOS'&gt;&#xA;  &lt;lbct:create-truck-visit-response&gt;&amp;lt;![CDATA[&amp;lt;argo:gate-response xmlns:argo=&quot;(Had to remove link)&quot; xmlns:xsi=&quot;(Had to remove link)&quot; xsi:schemaLocation=&quot;(Had to remove link)&quot;&amp;gt;&amp;lt;create-truck-visit-response&amp;gt;&amp;lt;truck-visit tv-key=&quot;52947590&quot; gos-tv-key=&quot;123&quot; tracking-tag-id=&quot;98765432&quot; is-internal=&quot;false&quot; next-stage-id=&quot;ingate&quot; status=&quot;OK&quot; gate-id=&quot;LBCT&quot; entered=&quot;2014-01-23T05:47:28&quot;&amp;gt;&amp;lt;trucking-co id=&quot;WNWI&quot; /&amp;gt;&amp;lt;truck id=&quot;98765432&quot; tag-id=&quot;98765432&quot; license-nbr=&quot;D98765432&quot; /&amp;gt;&amp;lt;chassis-profile id=&quot;40&quot; /&amp;gt;&amp;lt;driver card-id=&quot;98765432&quot; driver-name=&quot;LICENSEABC&quot; /&amp;gt;&amp;lt;/truck-visit&amp;gt;&amp;lt;/create-truck-visit-response&amp;gt;&amp;lt;/argo:gate-response&amp;gt;]]&amp;gt;&lt;/lbct:create-truck-visit-response&gt;&#xA;  &lt;lbct:process-truck-response&gt;&amp;lt;![CDATA[Unknown IN lane LANE20 for gate LBCT&amp;lt;argo:gate-response xmlns:argo=&quot;(Had to remove link)&quot; xmlns:xsi=&quot;(Had to remove link)&quot; xsi:schemaLocation=&quot;(Had to remove link)&quot;&amp;gt;&amp;lt;process-truck-response /&amp;gt;&amp;lt;/argo:gate-response&amp;gt;]]&amp;gt;&lt;/lbct:process-truck-response&gt;&#xA;&lt;/lbct:submit-ingate-data-response&gt;" />
  </messages>
  <submit-ingate-data-response xmlns:lbct="(Had to remove link)" xmlns="(Had to remove link)" xmlns:xsi="(Had to remove link)" lbct:message-id="789637546382669" lbct:message-date="2014-01-23T06:37:32.0Z" lbct:facility-id="LBCT" lbct:complex-id="LBCT" lbct:sender="TOS">
    <create-truck-visit-response>&lt;![CDATA[&lt;argo:gate-response xmlns:argo="(Had to remove link)" xmlns:xsi="(Had to remove link)" xsi:schemaLocation="(Had to remove link)"&gt;&lt;create-truck-visit-response&gt;&lt;truck-visit tv-key="52947590" gos-tv-key="123" tracking-tag-id="98765432" is-internal="false" next-stage-id="ingate" status="OK" gate-id="LBCT" entered="2014-01-23T05:47:28"&gt;&lt;trucking-co id="WNWI" /&gt;&lt;truck id="98765432" tag-id="98765432" license-nbr="D98765432" /&gt;&lt;chassis-profile id="40" /&gt;&lt;driver card-id="98765432" driver-name="LICENSEABC" /&gt;&lt;/truck-visit&gt;&lt;/create-truck-visit-response&gt;&lt;/argo:gate-response&gt;]]&gt;</create-truck-visit-response>
    <process-truck-response>&lt;![CDATA[Unknown IN lane LANE20 for gate LBCT&lt;argo:gate-response xmlns:argo="http://www.navis.com/argo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.navis.com/argo GateWebserviceResponse.xsd"&gt;&lt;process-truck-response /&gt;&lt;/argo:gate-response&gt;]]&gt;</process-truck-response>
  </submit-ingate-data-response>
</argo-response>

我唯一需要的部分是過程卡車響應。 我已經能夠成功撤出create-truck-visit。

這是我當前用來嘗試解碼和解析的代碼:

string xmlString = textBox1.Text;
            string action = String.Empty;
            XDocument xmlDoc = XDocument.Parse(xmlString);
            XNamespace lbctns = "http://www.lbct.com/TOS";

            XElement processTruckElement = xmlDoc.Document.Descendants(lbctns + "process-truck-response").FirstOrDefault();

            if (processTruckElement != null)
            {
                var decodedProccessTruckResponseElement = processTruckElement.Value;
                if (decodedProccessTruckResponseElement != null)
                {
                    decodedProccessTruckResponseElement = decodedProccessTruckResponseElement.Replace("<![CDATA[", "").Replace("]]>", "");
                }
                try
                {
                    var parsedSubmitMultipleElement = XElement.Parse(decodedProccessTruckResponseElement);

                }
                catch
                {

                }
            }

任何幫助將非常感激。

當XML工具說“無效”(而不是“格式不正確”)時,它們通常意味着您向他們提交了錯誤的文檔。 檢查此工具的期望。 特別是,由於您沒有在示例中指定名稱空間,因此請檢查是否需要名稱空間綁定。

process-truck-response元素的內容不包含有效的XML片段。

Unknown IN lane LANE20 for gate LBCT<argo:gate-response xmlns:argo="http://www.navis.com/argo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.navis.com/argo GateWebserviceResponse.xsd"><process-truck-response /></argo:gate-response>

您試圖將其解析為XElement ,但失敗了(正確的做法是)。

您應該驗證自己是否具有有效的XML,或者至少要處理包含不期望的內容的XML。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM