得到 XML 元素

命名空间:System.Xml;
使用的类:XmlDocument
实现目的:得到每节元素,但并不包含CDATAText

1.实例化一个XmlDocument对象用于操作Xml

XmlDocument xmldoc  =   new  XmlDocument();

 

2.加载XML文档,这里可以是文件流,字符串或XML路径

StringBuilder xmlContent  =   new  StringBuilder();
xmlContent.Append(
" <?xml version="1.0" encoding="GBK"?> " );
xmlContent.Append(
" <root systemname="内容"> " );
xmlContent.Append(
" </root> " );
xmldoc.LoadXml(xmlContent.ToString());


这里是加载一个XML字符串,如果想加载文件流或者是XML路径可使用下面的语句

byte [] buf  =   new   byte [xmlContent.ToString().Length];
buf 
=  Convert.FromBase64String(xmlContent.ToString());
buf 
=  System.Text.ASCIIEncoding.UTF8.GetBytes(xmlContent.ToString());
xmldoc.Load(
new  MemoryStream(buf));
string  url  =   @" C: ext.xml " ;
xmldoc.Load(url);

 

3.获得根节点,但并不包含<?xml version="1.0" encoding="GBK"?>

XmlElement element  =  xmldoc.DocumentElement;

 

4.递归得到每个节点的信息

protected   void  cycNode(XmlNode node)
{
    
// 判断节点的类型,过滤掉不想要的节点
    
// 在此循环中,会将Text和CDATA都视为节点
    
// 因此,有必要做一次判断
    if (node.NodeType == XmlNodeType.Element)
    
{
        
// 在这里判断此节点是子节点
        if (!hasChildNodes(node))
        
{
            
+ 子节点
        }

        
else
        
{
            
+ 父节点
        }

    }

}

protected   bool  hasChildNodes(XmlNode node)
{
    
if (node.HasChildNodes)
    
{
        
// 如果节点里只有Text或CDATA,那么,就不算是根节点
        if (node.ChildNodes.Count == 1 && (node.ChildNodes.Item(0).NodeType == XmlNodeType.CDATA || node.ChildNodes.Item(0).NodeType == XmlNodeType.Text))
            
return false;
        
else
            
return true;
    }

    
else
    
{
        
return false;
    }

}

 

按照上面的方法,应该就可以将数据罗列出来了
不仅可以递归节点,还可以在不知道有多少个属性的情况下,循环得到节点的属性

protected   string  cycAttributes(XmlNode node)
{
    
string returnValue = string.Empty;
    
// 得到节点的所有属性
    XmlAttributeCollection attributes = node.Attributes;
    
if (attributes == null) returnValue = "";
    
// 节点中属性的总数
    int length = attributes.Count;
    
if (length > 0)
    
{
        StringBuilder sbAttributes 
= new StringBuilder();
        
for (int i = 0; i < length; i++)
        
{
            sbAttributes.Append(
"属性名:");
            sbAttributes.Append(attributes.Item(i).Name);
            sbAttributes.Append(
"属性值:");
            sbAttributes.Append(attributes.Item(i).Value);
        }

        returnValue 
= sbAttributes.ToString();
    }

    
// 返回结果
    return returnValue;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值