繁体   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