1

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

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

xml文件中有几十个节点。

我想要做的是提取'name'参数下的url,所以我的最终结果将是:

http://www.mysite.com/products/phone.jsp _ _

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

我对用PHP做这件事特别感兴趣。

4

2 回答 2

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: SAX 和 DOM 有什么区别?

如果您觉得有帮助,我也可以提供一个 Java 示例。

于 2013-08-30T01:15:55.417 回答
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 演示

结果:

Array
(
    [0] => /products/phone
    [1] => /products/cell
    [2] => /products/mobile
)
于 2015-08-25T22:19:08.270 回答