2013-08-29 57 views
0

我有一個包含以下類型的數據如何從xml文件中解析/提取網址?

<definition name="/products/phone" path="/main/something.jsp" > </definition> 

有幾十個在xml文件節點的XML文件。

我想要做的是提取「名稱」參數下的網址,所以我最終的結果將是:

http://www.mysite.com/產品/電話 .JSP

我能做到這一點有所謂稱爲XML解析器?我不知道從哪裏開始。有人能引導我走向一個方向嗎?我需要什麼工具來實現這樣的目標?

我特別感興趣的是這樣做PHP

回答

1

給定上述基本XML,應該很容易在現有URL和預期資源類型後面追加路徑。如果你對C#感到滿意,並且你知道有一個且只有一個「定義」元素,這裏是一個自包含的小程序,它可以滿足你的需求(並且假設你正在從字符串中加載XML):

using System; 
using System.Xml; 

public class parseXml 
{ 
    private const string myDomain = "http://www.mysite.com/"; 
    private const string myExtension = ".jsp"; 

    public static void Main() 
    { 
     string xmlString = "<definition name='/products/phone' path='/main/something.jsp'> </definition>"; 

     XmlDocument doc = new XmlDocument(); 

     doc.LoadXml(xmlString); 

     string fqdn = myDomain + 
         doc.DocumentElement.SelectSingleNode("//definition").Attributes["name"].ToString() + 
         myExtension; 

     Console.WriteLine("Original XML: {0}\nResultant FQDN: {1}", xmlString, fqdn); 
    } 
} 

您將需要小心上面的SelectSingleNode; XPath表達式假定只有一個「定義」節點,並且您正在從文檔根目錄進行搜索。

從根本上說,值得閱讀關於XML的入門書。 Xml並不困難,它是一種自描述分層數據格式 - 大量嵌套文本,尖括號和引號:)。

一個很好的入門很可能是在W3學校: http://www.w3schools.com/xml/xml_whatis.asp

您可能還需要在流讀了(SAX/StreamReader的)與負載(DOM/XmlDocument的)XML: What is the difference between SAX and DOM?

我也可以提供一個Java的例子,如果你覺得這會有所幫助。

+0

這是非常有幫助的,我聽不懂的邏輯。非常感激! 你可以在PHP中提供一個例子嗎? xml文檔包含數十個「定義」節點,所以我猜想需要循環for yes? 類似於: '<?php $ xml = simplexml_load_file('myxml.xml'); foreach($ xml->定義爲$定義){ echo ..... } ?>' –

+0

不幸的是我不知道PHP :(但邏輯會像這樣工作:(1)閱讀將XML字符串/文件轉換爲XmlDocument對象。(2)如果您想要Xml根節點下的所有「定義」元素的集合,上述XPath表達式仍然可以工作(「//定義」) - 因此將XPath表達式應用於Xml文檔以返回「定義「元素。 (3)一旦你有了「定義」元素的集合,使用foreach循環遍歷它們(如上所述)並構造你的結果FQDN。 - 這有幫助嗎? – AFKAP

0

不知道你解決你的問題,所以這裏是一個PHP的解決方案:

$xml = <<<DATA 
<?xml version="1.0"?> 
<root> 
<definition name="/products/phone" path="/main/something.jsp"> </definition> 
<definition name="/products/cell" path="/main/something.jsp"> </definition> 
<definition name="/products/mobile" path="/main/something.jsp"> </definition> 
</root> 
DATA; 

$arr = array(); 
$dom = new DOMDocument('1.0', 'UTF-8'); 
$dom->loadHTML($xml); 

$xpath = new DOMXPath($dom); 
$defs = $xpath->query('//definition'); 

foreach($defs as $def) { 
    $attr = $def->getAttribute('name'); 
    if ($attr != "") { 
     array_push($arr, $attr); 
    } 
} 
print_r($arr); 

IDEONE demo

結果:

Array 
(
    [0] => /products/phone 
    [1] => /products/cell 
    [2] => /products/mobile 
)