C#解析XML文件遇到一个节点下有多个相同子节点的情况,只是数据不一样

Linda_bluesky 2017-12-29 09:49:05
我在做XML解析,我是根据相应表的字段名对应的xml具体节点位置,一层层解析XML文档的,但现在遇到一个问题,同一个A节点下可能出现多个相同B子节点,而B子节点下面还有C和D子节点,只是C和D子节点的数据不一样,我应该怎么做呢,求大神指点!
...全文
1568 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果下面这种,那就是集合设置了XElement特性,将数组转成的元素
<A>
<B/>
<B/>
<B/>
<B/>
<C/>
</A>
  • 打赏
  • 举报
回复
多个就是数组(集合) 话说你为啥不直接xml反序列化?
Linda_bluesky 2017-12-29
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
节点对应的是列,相同的节点名表示的是多行 不知道你遇到了什么问题
就是这种情况下怎么获取数据存储到数据库
xuzuning 2017-12-29
  • 打赏
  • 举报
回复
节点对应的是列,相同的节点名表示的是多行 不知道你遇到了什么问题
sakuragilyb 2017-12-29
  • 打赏
  • 举报
回复
/// <summary>
        /// 定位到指定名称节点的第index个位置
        /// </summary>
        /// <param name="xmlContent">要定位的xml内容</param>
        /// <param name="nodeName">要定位的节点名称</param>
        /// <param name="index">节点出现的位置</param>
        /// <returns></returns>
        public XmlNode GetNodePosByIndex(string xmlContent, string nodeName, int index = 0)//
        {
            try
            {
                XmlDocument oldXd = new XmlDocument();
                oldXd.LoadXml(xmlContent);
                XmlNodeList nodeList = oldXd.GetElementsByTagName(nodeName);
                if (nodeList.Count > index)
                    return nodeList[index];
                else
                    return null;
            }
            catch
            {
                return null;
            }
        }
/// <summary>
        /// 获取xml中指定节点的值
        /// </summary>
        /// <param name="xmlContent">xml内容</param>
        /// <param name="nodeName">节点名称</param>
        /// <param name="index">节点出现的位置</param>
        /// <returns></returns>
        public string GetNodeValue(string xmlContent, string nodeName, int index = 0)
        {
            try
            {
                XmlNode tempNode = GetNodePosByIndex(xmlContent, nodeName, index);
                if (tempNode != null)
                {
                    return tempNode.InnerText;
                }
                else
                    return "";

            }
            catch
            {
                return "";
            }

        }
wanghui0380 2017-12-29
  • 打赏
  • 举报
回复
我们这么说把,在vs10以上有个功能叫“选择性粘贴” 下面有个功能叫“将xml粘贴为类” 你先用这个功能粘贴,如果能粘贴表示xml格式本身没毛病。你可以正常解析,那么你把这个粘贴的类发帖出来,我们来看有没有能合并的地方(vs的确能自动生成类,不过他不能智能判定那些父子Element其实是一个对象,只是嵌套了,所以我们需要手工合并一下) 如果vs都无法粘贴,那说xml本身不合标准规范,那就把xml本身贴出来,我在用传统的玩意,一步一步遍历去搞
xuzuning 2017-12-29
  • 打赏
  • 举报
回复
你说你的解法不一样,那你总得告知你是怎么做的吧? 另外请直接回复,不要发私信
xuzuning 2017-12-29
  • 打赏
  • 举报
回复 1
比如有这样的 XML
<?xml version="1.0" encoding="gbk"?>
<root>
<User ID="20170404100510">
<Name>喵小咪</Name>
<Sex>女</Sex>
<Age>17</Age>
<Phone>1234567890</Phone>
<Friend>汪大狗</Friend>
</User>
<User ID="20170404100511">
<Name>喵小喵</Name>
<Sex>女</Sex>
<Age>17</Age>
<Phone>1234567890</Phone>
<Friend>汪大狗</Friend>
</User>
</root>
保存在 3.txt 中,有
            XDocument doc = XDocument.Load("3.txt");

var elements = from e in doc.Elements("root").Elements("User")
select new
{
Id = e.Attribute("ID").Value,
Name = e.Element("Name").Value,
Sex = e.Element("Sex").Value,
Age = e.Element("Age").Value,
Phone = e.Element("Phone").Value,
Friend = e.Element("Friend").Value,

};
foreach (var e in elements)
{
Console.WriteLine(e);
}

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧