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