簡體   English   中英

使用 Linq 獲取 CDATA XML 部分

[英]Getting CDATA XML Section Using Linq

我四處搜索,尋找進入 CDATA 部分文本區域的方法,並使用 linq 找到了非常溫暖的解決方案。 我需要提取嵌入在 CDATA 部分中的 XML,以便我可以提取不同的信息。 我有以下 XML:

<Envelope>
 <Warehouse />
 <Payload>
  - <![CDATA[ 
    <?xml version="1.0"?>
    <ROOT>
      <ORDERID>399798</ORDERID>
      <PRODUCTNUMBER>00003997</PRODUCTNUMBER>
      <DESCIPTION>Red Rider BB-Gun</DESCIPTION>
      <STATUS>InStock</STATUS>
      <LOCATION>Chicago</LOCATION>
    </ROOT> ]]>
 </Payload>
</Envelope>

因此,如果可能的話,我希望通過將整個 cdata 部分提取到 XDocument 中來做到這一點,以便我可以使用 Linq 進行查詢。 另外,如果我只想從 CData 部分中提取一個元素。 我怎樣才能做到這一點? 使用林克?

我曾嘗試使用下面的這個 Linq 代碼來返回 cdata 部分,但由於它作為 IEnumerable 返回,因此無法對它做任何事情。 我可能遺漏了一些簡單的東西,所以我來找你的 Linq 向導尋求幫助。

這是我提到的代碼:

 var queryCDATAXML = from el in xdoc.DescendantNodes()
                     where el.NodeType == XmlNodeType.CDATA
                     select el.Parent.Value.Trim();

有沒有辦法像這樣選擇新的 XDocument 或 XmlDocument:

//This doesn't compile.
 var queryCDATAXML = from el in xdoc.DescendantNodes()
                            where el.NodeType == XmlNodeType.CDATA
                            select new XDocument()
                              {  
                                 el.Parent.Value.Trim();
                              }   

如果我對這一切都做錯了,或者他們是實現這一目標的更好方法,我願意接受建議。 :)

謝謝,免打擾

代碼更新:

var queryCDATAXML = from el in xdoc.DescendantNodes()
                     where el.NodeType == XmlNodeType.CDATA
                     select el.Parent.Value.Trim();

var xdoc = XDocument.Parse(queryCDATAXML);

生成此錯誤:參數“1”:無法從“System.Collections.Generic.IEnumerable”轉換為“string”。

而不是new XDocument ,試試XDocument.Parse

var queryCDATAXML = // get the value
var xdoc = XDocument.Parse(queryCDATAXML);

您將獲得一些Enumerable<string>而不是string ,因此您只需要獲得單個值。

var node = xdoc.DescendantNodes().Single(el => el.NodeType == XmlNodeType.CDATA);
var content = node.Parent.Value.Trim();
var xdoc = XDocument.Parse(content);

我以這種形式解決了這個案例:

XDocument xdoc = XDocument.Parse(vm.Xml);

XNamespace cbc = @"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2";
  var list2 =
       (from el in xdoc.Descendants(cbc + "Description")
        select el).FirstOrDefault();

      var queryCDATAXML = (from eel in list2.DescendantNodes()                                                
      select eel.Parent.Value.Trim()).FirstOrDefault();

我希望能幫助他們

暫無
暫無

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

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