操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP)

简介: 原文:操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP) 不管是用 PHP 还是 C#, 在操作 XML 的时候我们除了一个节点一个节点去取值之外, 还有一个非常方便的表达式, 就是 XPATH    而昨晚在使用 XPATH 的时候, 遇到一个问题, 改了一个晚上才搞定, 差点没吐血.

原文:操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP)

不管是用 PHP 还是 C#, 在操作 XML 的时候我们除了一个节点一个节点去取值之外, 还有一个非常方便的表达式, 就是 XPATH   
而昨晚在使用 XPATH 的时候, 遇到一个问题, 改了一个晚上才搞定, 差点没吐血. 果然基础知识要掌握扎实啊!!

假设有以下一份 XML 文档:

 

 

我们要获取所有歌曲的标题, 一般是使用以下的 XPATH 表达式:

代码如下:
/playlist/trackList/track/title

但是匹配的结果会让你非常失望, 你会发现什么也得不到. 于是我在这个问题上卡了好几个小时, 最终万能的 Google 告诉了我答案.
在第二行 playlist 那个节点, 有一个 XMLNS 属性, 这个是 XML 的命名空间 (Namespace), 就是因为这个属性的存在, 所以我们上面的 XPATH 就无效了. 怎么办? 答案是在程序中为我们的 XML 注册命名空间.
使用 C# 给 XML 注册命名空间和获取歌曲标题:

代码如下:
XmlDocument xml = new XmlDocument();
xml.Load("music.xml");
XmlNamespaceManager xnm = new XmlNamespaceManager(xml.NameTable);
xnm.AddNamespace("x", "http://xspf.org/ns/0/");
string xpath = "/x:playlist/x:trackList/x:track/x:title";
foreach (XmlNode xn in xml.SelectNodes(xpath, xnm))
{ Console.WriteLine(xn.InnerText); }

 代码如下:

$xml = simplexml_load_file('music.xml'); $xml->registerXPathNamespace('x','http://xspf.org/ns/0/'); $xpath = '/x:playlist/x:trackList/x:track'; $result = $xml->xpath($xpath); foreach($result as $row){ echo $row->title; }

 

目录
相关文章
|
6月前
|
XML 存储 JavaScript
DOM 节点遍历:掌握遍历 XML文档结构和内容的技巧
**XML DOM 遍历、操作和导航概述** - 遍历XML节点树用于提取信息,例如,通过JavaScript的DOM API循环`<book>`子节点显示名称和值。 - DOM解析器处理XML文本数据,包括解析字符数据(PCDATA)和识别CDATA段。 - 节点导航涉及`parentNode`、`childNodes`等属性,`get_nextSibling`等辅助函数避免空文本节点。 - `getElementsByTagName`、`getAttribute`和`nodeValue`用于检索元素、属性值和文本。
87 6
DOM 节点遍历:掌握遍历 XML文档结构和内容的技巧
|
6月前
|
PHP
php的foreach神操作
php的foreach神操作
39 0
|
3月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
使用Java和XPath在XML文档中精准定位数据
|
6月前
|
JavaScript Java 测试技术
基于微信小程序的家政服务预约系统的+php+vue.js附带文章和源代码设计说明文档ppt
基于微信小程序的家政服务预约系统的+php+vue.js附带文章和源代码设计说明文档ppt
59 3
基于微信小程序的家政服务预约系统的+php+vue.js附带文章和源代码设计说明文档ppt
|
5月前
|
XML Java 数据库连接
idea 从mapper方法直接点进xml文件的解决方法
idea 从mapper方法直接点进xml文件的解决方法
538 2
|
5月前
|
PHP
php对memcached简单的操作
php对memcached简单的操作
36 0
|
5月前
|
SQL 关系型数据库 MySQL
php mysqli操作数据库
php mysqli操作数据库
33 0
|
6月前
|
JavaScript Java 测试技术
基于微信小程序的社团活动助手php+vue.js附带文章和源代码设计说明文档ppt
基于微信小程序的社团活动助手php+vue.js附带文章和源代码设计说明文档ppt
38 1
|
6月前
|
安全 关系型数据库 MySQL
【PHP开发专栏】PHP PDO与MySQLi操作数据库
【4月更文挑战第30天】PHP数据库交互的核心是PDO和MySQLi。PDO提供数据访问抽象层,支持多种数据库,强调安全和灵活性;MySQLi则专为MySQL设计,有面向对象和过程化接口。两者都支持预处理语句,防止SQL注入。选择取决于项目需求,如可移植性、特定功能和API偏好。了解其使用有助于编写安全高效的代码。
98 2
|
6月前
|
PHP 数据安全/隐私保护
【PHP开发专栏】PHP魔术方法与对象操作
【4月更文挑战第30天】PHP 魔术方法是特殊方法,如`__construct`、`__get`等,在特定时刻自动调用,用于重写默认行为。本文分三部分介绍PHP魔术方法和对象操作:1) 魔术方法包括构造、析构、属性访问等,常用于控制访问权限、自动加载等;2) 对象操作涉及创建、访问属性和方法、克隆及序列化/反序列化;3) 案例展示如何在创建对象时设置默认值。
48 1