如何从xml文件解析/提取url?

时间:2013-08-29 19:51:09

标签: php xml xml-parsing tiles tiles2

我有一个包含以下数据类型的XML文件

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

xml文件中有几十个节点。

我想要做的是在'name'参数下提取网址,这样我的最终结果就是:

http://www.mysite.com /产品/电话的.jsp

我可以使用所谓的XML解析器吗?我不知道从哪里开始。有人可以引导我走向一个方向。我需要哪些工具来实现这样的目标?

我对使用 PHP 执行此操作特别感兴趣。

2 个答案:

答案 0 :(得分:1)

在给定上述基本XML的情况下,应该很容易将路径附加到现有URL和预期的资源类型。

如果您对C#感到满意,并且您知道只有一个“定义”元素,那么这是一个自包含的小程序,可以满足您的需要(并假设您从字符串加载XML):< / p>

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示例。

答案 1 :(得分: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
)