如何使用LINQ将所有xml节点值和CDATA值检索到列表中 [英] How can i retrieve all xml node value and CDATA value into a list using LINQ

查看:78
本文介绍了如何使用LINQ将所有xml节点值和CDATA值检索到列表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好专家,我想提取一个XML元素是它们对应的NameValueCollection列表中的值(List< namevaluecollection>),并且还将元素中存在的所有CDATA检索到List中以及使用LINQ to C#中的XML代码。而且我想让用户只在下面的方法中输入一个元素名称,该方法应显示其值或其CDATA值。谢谢



这里是XML数据。



 <?  xml    版本  =   \  1.0 \   编码  =   \  utf-8 \    >  
< TRANS_NET >
< REQUEST_ID > 1278999 < / REQUEST_ID >
< REQUEST_DATE > 2013-12-06 12:10:23.0 < / REQUEST_DATE >

< RESPONSE_CODE > 001 < / RESPONSE_CODE >
< RESPONSE_REASON >
< SUCCESS > 100 < / SUCCESS >
< ; / RESPONSE_REASON >

< CATALOG >
< CARDDATA >
< SERIAL_NO > 11177202 < / SERIAL_NO >
< BATCH_NO > 3980 < / BATCH_NO >
< BASE_CARD_TYPE > <![CDATA [ REV< / BASE_CARD_TYPE>
< CARD_TYPE><![CDATA [PRDC< / CARD_TYPE>
< CARD_NAME><![CDATA [inCharge Global Cards< / CARD_NAME>
< CARD_STATUS> A< / CARD_STATUS>
< CURRENCY_CODE><![CDATA [GHS< / CURRENCY_CODE>
< CURRENT_BALANCE> 0.000< / CURRENT_BALANCE>
< EXPIRED><![CDATA [N< / EXPIRED>
< MAX_CAP> 100000000000.000< / MAX_CAP>
< EXP_DATE><![CDATA [2016-10< / EXP_DATE>
< / CARDDATA>
< / CATALOG>
< / TRANS_NET>

这是我的林





这是我的C#代码

 public NameValueCollection GenericGetXMLTreeValue(string xmlTag,string toTraverse)
{
if(xmlTag == null || xmlTag.Length< = 0)
抛出新的ArgumentNullException(要检查的元素不能为空);
if(toTraverse == null || toTraverse.Length< = 0)
抛出新的ArgumentNullException(XML响应不能为空);

NameValueCollection arrXMLResponse = new NameValueCollection();

XElement cardData = XElement.Parse(toTraverse);
foreach(cardData.Descendants()中的XElement eachXelement)
{
arrXMLResponse.Add(eachXelement.Element(xmlTag).Name.LocalName,eachXelement.Element(xmlTag).Value);
}

返回arrXMLResponse;
}< / namevaluecollection>

解决方案

推荐



http://stackoverflow.com/questions/16609350/get -nodes-from-xml-using-linq-in-c-sharp [ ^ ]



希望这会有所帮助......


如果是逻辑XML结构,就没有CDATA这样的东西,这只不过是一种转义某些字符串值中所有XML格式化字符的方法,这是物理XML结构的一部分。在其他工作中,CDATA不是存储在XML中的数据结构的一部分,它是XML格式化的另一个工件。您只需要获取XML元素的文本节点 BASE_CARD_TYPE



如果你想使用LINQ来XML编程,最合适的XML解析器是 System.Xml.Linq.XDocument ,阅读上面的MSDN文档: http://msdn.microsoft.com/en-us/library/system.xml.linq。 xdocument%28v = vs.110%29.aspx [ ^ ]。



-SA

Hello experts, i want to extract the an XML element are their corresponding value in to a List of NameValueCollection like (List<namevaluecollection>), and also retrieve all the CDATA present in the element into the List as well using LINQ to XML code in C#. and also i want to allow user to just enter an Element name in the method below a the method should display its value or its CDATA value. Thanks

Here the XML Data.

<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<TRANS_NET>
<REQUEST_ID>1278999</REQUEST_ID>
<REQUEST_DATE>2013-12-06 12:10:23.0</REQUEST_DATE>

<RESPONSE_CODE>001</RESPONSE_CODE>
<RESPONSE_REASON>
<SUCCESS>100</SUCCESS>
</RESPONSE_REASON>

<CATALOG>
<CARDDATA>
<SERIAL_NO>11177202</SERIAL_NO>
<BATCH_NO>3980</BATCH_NO>
<BASE_CARD_TYPE> <![CDATA[REV </BASE_CARD_TYPE>
<CARD_TYPE><![CDATA[PRDC</CARD_TYPE>
<CARD_NAME><![CDATA[inCharge Global Cards</CARD_NAME>
<CARD_STATUS>A</CARD_STATUS>
<CURRENCY_CODE><![CDATA[GHS</CURRENCY_CODE>
<CURRENT_BALANCE>0.000</CURRENT_BALANCE>
<EXPIRED><![CDATA[N</EXPIRED>
<MAX_CAP>100000000000.000</MAX_CAP>
<EXP_DATE><![CDATA[2016-10</EXP_DATE>
</CARDDATA>
</CATALOG>
</TRANS_NET>

An here is my Lin



Here is my C# Code

public NameValueCollection GenericGetXMLTreeValue(string xmlTag, string toTraverse)
        {
            if (xmlTag == null || xmlTag.Length <= 0)
                throw new ArgumentNullException("Element To Check Can Not Be Empty");
            if (toTraverse == null || toTraverse.Length <= 0)
                throw new ArgumentNullException("XML Response Can Not Be Empty");

            NameValueCollection arrXMLResponse = new NameValueCollection();

            XElement cardData = XElement.Parse(toTraverse);
            foreach (XElement eachXelement in cardData.Descendants())
            {
                arrXMLResponse.Add(eachXelement.Element(xmlTag).Name.LocalName, eachXelement.Element(xmlTag).Value);
            }

            return arrXMLResponse;
        }</namevaluecollection>

解决方案

Refer

http://stackoverflow.com/questions/16609350/get-nodes-from-xml-using-linq-in-c-sharp[^]

Hope this helps...


If logical XML structure, there is no such thing as CDATA, this is no more than a way to "escape" all XML formatting characters in some string value, a part of physical XML structure. In other workds, "CDATA" is not a part of the data structure stored in XML, it is yet another artifact of XML formatting. You simply need to get the text node of your XML element BASE_CARD_TYPE.

If you want to use LINQ to XML programming, the most adequate XML parser would be System.Xml.Linq.XDocument, read the MSDN documentation on it: http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument%28v=vs.110%29.aspx[^].

—SA


这篇关于如何使用LINQ将所有xml节点值和CDATA值检索到列表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆