[英]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.