在C#或python中使用xpath解析xml
记几个笔记
文件后缀不一定要.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的更多相关文章
- Python中使用ElementTree解析xml
在Python中,ElementTree是我们常用的一个解析XML的模块 1.导入ElementTree模块 from xml.etree import ElementTree as ET 2.初始化 ...
- Python中利用xpath解析HTML
在进行网页抓取的时候,分析定位html节点是获取抓取信息的关键,目前我用的是lxml模块(用来分析XML文档结构的,当然也能分析html结构), 利用其lxml.html的xpath对html进行分析 ...
- julia与python中的列表解析.jl
julia与python中的列表解析.jl #=julia与python中的列表解析.jl 2016年3月16日 07:30:47 codegay julia是一门很年轻的科学计算语言 julia文档 ...
- Python中的列表解析和生成器表达式
Python中的列表解析和生成器表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.列表解析案例 #!/usr/bin/env python #_*_coding:utf-8 ...
- 第14.12节 Python中使用BeautifulSoup解析http报文:使用select方法快速定位内容
一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>和<第14.11节 Python中使用BeautifulSo ...
- 第14.11节 Python中使用BeautifulSoup解析http报文:使用查找方法快速定位内容
一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>介绍了BeautifulSoup对象的主要属性,通过这些属性可以访 ...
- JAVA通过XPath解析XML性能比较(原创)
(转载请标明原文地址) 最近在做一个小项目,使用到XML文件解析技术,通过对该技术的了解和使用,总结了以下内容. 1 XML文件解析的4种方法 通常解析XML文件有四种经典的方法.基本的解析方式有两种 ...
- JAVA通过XPath解析XML性能比较
转自[http://www.cnblogs.com/mouse-coder/p/3451243.html] 最近在做一个小项目,使用到XML文件解析技术,通过对该技术的了解和使用,总结了以下内容. 1 ...
- Xpath解析xml
Xpath解析xml其实最主要的是查找xml文档中信息,而且不需要了解xml文档结构 package com.huawei.xml; import java.io.InputStream;import ...
- java中采用dom4j解析xml文件
一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...
随机推荐
- AI 0基础学习,数学名词解析
AI学习过程中,常见的名词解析 中位数 将数据从小到大排序,奇数列,取中间值,偶数列,中间两个值的平均,可做为销售指标 众数 一组数据中,数值出现最多的那个.反映哪款产品,销量最好 平均数 比赛中,去 ...
- Docker 与 Linux Cgroups:资源隔离的魔法之旅
这篇文章主要介绍了 Docker 如何利用 Linux 的 Control Groups(cgroups)实现容器的资源隔离和管理. 最后通过简单 Demo 演示了如何使用 Go 和 cgroups ...
- k8s--容器挂载 error: /proc must be mounted
问题描述: 登录容器,执行ps命令查看进程时,报错/proc挂载问题,如下图,按照图上所说在/etc/fstab 下添加,还是报错 思路: 可能是lxcfs挂了或者hang住了,具体要登录k8s节点实 ...
- hyper-v虚拟机中ubuntu连不上网络的解决办法
首先重启下hyper-v的服务,看下情况: 1.检查hyper-v相关的服务有没有开启 2.如果开启了服务,unbuntu仍然不能连网,则在ubtuntu中进行接下来的步骤: 2.1 设置网络连接为N ...
- ElasticSearch 创建、删除索引
创建索引: PUT http://IP:Port/mytest-statistics { "aliases": {}, "mappings": { " ...
- Redis 内存优化在 vivo 的探索与实践
作者:vivo 互联网服务器团队- Tang Wenjian 一. 背景 使用过 Redis 的同学应该都知道,它基于键值对(key-value)的内存数据库,所有数据存放在内存中,内存在 Redis ...
- 图解 Promise 实现原理(一)—— 基础实现
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/UNzYgpnKzmW6bAapYxnXRQ作者:孔垂亮 很多同学在学习 Promise 时,知 ...
- springboot线程池的使用方式1
线程池的创建方法 总共有 7 种,但总体来说可分为 2 类: 一类是通过 ThreadPoolExecutor 创建的线程池: 另一个类是通过 Executors 创建的线程池. 1. Executo ...
- 技术文档 | OpenSCA技术原理之composer依赖解析
OpenSCA知识小课堂开课了! 今天主要介绍基于composer包管理器的组件成分解析原理. composer介绍 composer是PHP的依赖管理工具. 开发者受到Node.js的npm及Rub ...
- celery与django的结合以及定时任务配置
一.conda创建新的开发环境 C:\Users\yc>conda create --name celery_django python=3.8 C:\Users\yc>conda inf ...