操作XML文檔遇到的XMLNS問(wèn)題及解決方法 (C# 和 PHP)
更新時(shí)間:2011年05月14日 16:18:45 作者:
不管是用 PHP 還是 C#, 在操作 XML 的時(shí)候我們除了一個(gè)節(jié)點(diǎn)一個(gè)節(jié)點(diǎn)去取值之外, 還有一個(gè)非常方便的表達(dá)式, 就是 XPATH
而昨晚在使用 XPATH 的時(shí)候, 遇到一個(gè)問(wèn)題, 改了一個(gè)晚上才搞定, 差點(diǎn)沒(méi)吐血. 果然基礎(chǔ)知識(shí)要掌握扎實(shí)啊!!
/playlist/trackList/track/title
但是匹配的結(jié)果會(huì)讓你非常失望, 你會(huì)發(fā)現(xiàn)什么也得不到. 于是我在這個(gè)問(wèn)題上卡了好幾個(gè)小時(shí), 最終萬(wàn)能的 Google 告訴了我答案.
在第二行 playlist 那個(gè)節(jié)點(diǎn), 有一個(gè) XMLNS 屬性, 這個(gè)是 XML 的命名空間 (Namespace), 就是因?yàn)檫@個(gè)屬性的存在, 所以我們上面的 XPATH 就無(wú)效了. 怎么辦? 答案是在程序中為我們的 XML 注冊(cè)命名空間.
使用 C# 給 XML 注冊(cè)命名空間和獲取歌曲標(biāo)題:
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);
}
使用 PHP 給 XML 注冊(cè)命名空間和獲取歌曲標(biāo)題:
$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;
}
假設(shè)有以下一份 XML 文檔:
我們要獲取所有歌曲的標(biāo)題, 一般是使用以下的 XPATH 表達(dá)式:
復(fù)制代碼 代碼如下:
/playlist/trackList/track/title
但是匹配的結(jié)果會(huì)讓你非常失望, 你會(huì)發(fā)現(xiàn)什么也得不到. 于是我在這個(gè)問(wèn)題上卡了好幾個(gè)小時(shí), 最終萬(wàn)能的 Google 告訴了我答案.
在第二行 playlist 那個(gè)節(jié)點(diǎn), 有一個(gè) XMLNS 屬性, 這個(gè)是 XML 的命名空間 (Namespace), 就是因?yàn)檫@個(gè)屬性的存在, 所以我們上面的 XPATH 就無(wú)效了. 怎么辦? 答案是在程序中為我們的 XML 注冊(cè)命名空間.
使用 C# 給 XML 注冊(cè)命名空間和獲取歌曲標(biāo)題:
復(fù)制代碼 代碼如下:
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);
}
使用 PHP 給 XML 注冊(cè)命名空間和獲取歌曲標(biāo)題:
復(fù)制代碼 代碼如下:
$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;
}
您可能感興趣的文章:
- C# XML操作 代碼大全(讀XML,寫(xiě)XML,更新,刪除節(jié)點(diǎn),與dataset結(jié)合等)
- C#對(duì)XML文件的各種操作實(shí)現(xiàn)方法
- C#對(duì)象與XMl文件之間的相互轉(zhuǎn)換
- C# WinForm開(kāi)發(fā)中使用XML配置文件實(shí)例
- C#中XmlTextWriter讀寫(xiě)xml文件詳細(xì)介紹
- C#實(shí)現(xiàn)復(fù)雜XML的序列化與反序列化
- C# 寫(xiě)入XML文檔三種方法詳細(xì)介紹
- C# XML與Json之間相互轉(zhuǎn)換實(shí)例詳解
- C#生成XML的三種途徑小結(jié)
- 基于C#中XmlReader讀取Xml的深入分析
- c#讀取xml文件到datagridview實(shí)例
- C# xmlSerializer簡(jiǎn)單用法示例
相關(guān)文章
C#中調(diào)用SAPI實(shí)現(xiàn)語(yǔ)音合成的2種方法
這篇文章主要介紹了C#中調(diào)用SAPI實(shí)現(xiàn)語(yǔ)音合成的2種方法,本文直接給出示例代碼,需要的朋友可以參考下2015-06-06Unity的IPostprocessBuild實(shí)用案例深入解析
這篇文章主要為大家介紹了Unity的IPostprocessBuild實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05C#接口INotifyPropertyChanged使用方法
這篇文章介紹了C#接口INotifyPropertyChanged的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01C# 進(jìn)行圖片壓縮的示例代碼(對(duì)jpg壓縮效果最好)
這篇文章主要介紹了C# 進(jìn)行圖片壓縮的示例代碼,幫助大家更好的利用c# 處理圖片,提高辦公效率,感興趣的朋友可以了解下2020-11-11C#獲取機(jī)器碼的方法詳解(機(jī)器名,CPU編號(hào),硬盤(pán)編號(hào),網(wǎng)卡mac等)
這篇文章主要介紹了C#獲取機(jī)器碼的方法,結(jié)合實(shí)例形式詳細(xì)分析了C#獲取硬件機(jī)器名、CPU編號(hào)、硬盤(pán)編號(hào)、網(wǎng)卡mac等信息的相關(guān)實(shí)現(xiàn)方法,需要的朋友可以參考下2016-07-07C#實(shí)現(xiàn)系統(tǒng)休眠或靜止休眠的方法
這篇文章主要介紹了C#實(shí)現(xiàn)系統(tǒng)休眠或靜止休眠的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05