我有一个包含以下数据类型的XML文件
<definition name="/products/phone" path="/main/something.jsp" > </definition>
xml文件中有几十个节点。
我想要做的是在'name'参数下提取网址,这样我的最终结果就是:
http://www.mysite.com的 /产品/电话的.jsp
我可以使用所谓的XML解析器吗?我不知道从哪里开始。有人可以引导我走向一个方向。我需要哪些工具来实现这样的目标?
我对使用 PHP 执行此操作特别感兴趣。
答案 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
)