记几个笔记

文件后缀不一定要.xml,可以是任意后缀,只要内容是符合xml和格式即可解析出来

文件编码需要是utf-8,python和c#都需要,或者xml文件头有这样一句:<?xml version="1.0" encoding="utf-8"?>

一些比较复杂的文件,如果按照从上往下一层一层节点来解析,那么比较麻烦,但是通过xpath,指定节点来解析,那么就方便多了。

xml文件示例

<root>
<space>
<name> 江南 </name>
<subzone>
<zone>
<name> 桃溪 </name>
<ambient> jiangnan/forest_05 </ambient>
<music> Zone/xxxx1 </music>
</zone>
<zone>
<name> 木渎镇 </name>
<ambient> jiangnan/muduzheng </ambient>
<music> Jn_2/xxxx2 </music>
</zone>
<!--....还有很多zone !-->
<subzone>
<music> Space/Jiangnan_xxx </music>
<ambient> function/amb_wind </ambient>
<space>
</root>

C#版本解析

重要的点就是通过node.SelectSingleNode来选择要的节点。

var xmldoc = new XmlDocument();
var xmlReader = XmlReader.Create(def_path);
xmldoc.Load(xmlReader);
var nodeList = xmldoc.FirstChild.ChildNodes;
Console.WriteLine($"读入xml,节点数:{nodeList.Count}");
StringBuilder builder = new StringBuilder();
builder.AppendLine($"场景chunk名称,音乐名,环境底噪,所属大区"); //场景chunk名称 文件夹名 资源名 foreach (XmlNode node in nodeList)
{
if (node.Name != "space")
{
Console.WriteLine("遇到特殊节点,未解析");
continue;
}
var subzone = node.SelectSingleNode("subzone");
var name = node.SelectSingleNode("name");
var music = node.SelectSingleNode("music");
var ambient = node.SelectSingleNode("ambient"); //....处理第1层节点的数据 if (subzone != null)
{
var zones = subzone.ChildNodes;
foreach (XmlLinkedNode ccNode in zones)
{
var name1 = ccNode.SelectSingleNode("name");
var music1 = ccNode.SelectSingleNode("music");
var ambient1 = ccNode.SelectSingleNode("ambient");
var subzone1 = ccNode.SelectSingleNode("subzone");
//..... 处理第2层节点的数据
//note 如果还有子子节点的话,需要再次处理
if (subzone1 != null)
{
Console.WriteLine($"第2层之后还有subzone, name:{tunkName} ,未解析");
}
}
}
}

python版本解析

python解析xml的文档:https://docs.python.org/zh-cn/2.7/library/xml.etree.elementtree.html

示例:

import xml.etree.ElementTree as ET
if __name__ == '__main__':
xml_path = r"D:\xxx\scene.xml"
tree = ET.parse(xml_path)
root = tree.getroot()
for child in root:
childs = child.getchildren()
print(childs,child.tag,child.text)
if child.tag == "space" and child.text and child.text:
pass

在C#或python中使用xpath解析xml的更多相关文章

  1. Python中使用ElementTree解析xml

    在Python中,ElementTree是我们常用的一个解析XML的模块 1.导入ElementTree模块 from xml.etree import ElementTree as ET 2.初始化 ...

  2. Python中利用xpath解析HTML

    在进行网页抓取的时候,分析定位html节点是获取抓取信息的关键,目前我用的是lxml模块(用来分析XML文档结构的,当然也能分析html结构), 利用其lxml.html的xpath对html进行分析 ...

  3. julia与python中的列表解析.jl

    julia与python中的列表解析.jl #=julia与python中的列表解析.jl 2016年3月16日 07:30:47 codegay julia是一门很年轻的科学计算语言 julia文档 ...

  4. Python中的列表解析和生成器表达式

    Python中的列表解析和生成器表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.列表解析案例 #!/usr/bin/env python #_*_coding:utf-8 ...

  5. 第14.12节 Python中使用BeautifulSoup解析http报文:使用select方法快速定位内容

    一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>和<第14.11节 Python中使用BeautifulSo ...

  6. 第14.11节 Python中使用BeautifulSoup解析http报文:使用查找方法快速定位内容

    一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>介绍了BeautifulSoup对象的主要属性,通过这些属性可以访 ...

  7. JAVA通过XPath解析XML性能比较(原创)

    (转载请标明原文地址) 最近在做一个小项目,使用到XML文件解析技术,通过对该技术的了解和使用,总结了以下内容. 1 XML文件解析的4种方法 通常解析XML文件有四种经典的方法.基本的解析方式有两种 ...

  8. JAVA通过XPath解析XML性能比较

    转自[http://www.cnblogs.com/mouse-coder/p/3451243.html] 最近在做一个小项目,使用到XML文件解析技术,通过对该技术的了解和使用,总结了以下内容. 1 ...

  9. Xpath解析xml

    Xpath解析xml其实最主要的是查找xml文档中信息,而且不需要了解xml文档结构 package com.huawei.xml; import java.io.InputStream;import ...

  10. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

随机推荐

  1. AI 0基础学习,数学名词解析

    AI学习过程中,常见的名词解析 中位数 将数据从小到大排序,奇数列,取中间值,偶数列,中间两个值的平均,可做为销售指标 众数 一组数据中,数值出现最多的那个.反映哪款产品,销量最好 平均数 比赛中,去 ...

  2. Docker 与 Linux Cgroups:资源隔离的魔法之旅

    这篇文章主要介绍了 Docker 如何利用 Linux 的 Control Groups(cgroups)实现容器的资源隔离和管理. 最后通过简单 Demo 演示了如何使用 Go 和 cgroups ...

  3. k8s--容器挂载 error: /proc must be mounted

    问题描述: 登录容器,执行ps命令查看进程时,报错/proc挂载问题,如下图,按照图上所说在/etc/fstab 下添加,还是报错 思路: 可能是lxcfs挂了或者hang住了,具体要登录k8s节点实 ...

  4. hyper-v虚拟机中ubuntu连不上网络的解决办法

    首先重启下hyper-v的服务,看下情况: 1.检查hyper-v相关的服务有没有开启 2.如果开启了服务,unbuntu仍然不能连网,则在ubtuntu中进行接下来的步骤: 2.1 设置网络连接为N ...

  5. ElasticSearch 创建、删除索引

    创建索引: PUT http://IP:Port/mytest-statistics { "aliases": {}, "mappings": { " ...

  6. Redis 内存优化在 vivo 的探索与实践

    作者:vivo 互联网服务器团队- Tang Wenjian 一. 背景 使用过 Redis 的同学应该都知道,它基于键值对(key-value)的内存数据库,所有数据存放在内存中,内存在 Redis ...

  7. 图解 Promise 实现原理(一)—— 基础实现

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/UNzYgpnKzmW6bAapYxnXRQ作者:孔垂亮 很多同学在学习 Promise 时,知 ...

  8. springboot线程池的使用方式1

    线程池的创建方法 总共有 7 种,但总体来说可分为 2 类: 一类是通过 ThreadPoolExecutor 创建的线程池: 另一个类是通过 Executors 创建的线程池. 1. Executo ...

  9. 技术文档 | OpenSCA技术原理之composer依赖解析

    OpenSCA知识小课堂开课了! 今天主要介绍基于composer包管理器的组件成分解析原理. composer介绍 composer是PHP的依赖管理工具. 开发者受到Node.js的npm及Rub ...

  10. celery与django的结合以及定时任务配置

    一.conda创建新的开发环境 C:\Users\yc>conda create --name celery_django python=3.8 C:\Users\yc>conda inf ...