Как разобрать / извлечь URL из файла XML?
У меня есть файл XML, который содержит данные следующего типа
<definition name="/products/phone" path="/main/something.jsp" > </definition>
В XML-файле есть десятки узлов.
Что я хочу сделать, это извлечь URL под параметром "имя", чтобы мой конечный результат был:
http://www.mysite.com// products / phone.jsp
Могу ли я сделать это с помощью так называемого парсера XML? Я понятия не имею, с чего начать. Может кто-нибудь направить меня в направлении. Какие инструменты мне нужны для достижения чего-то подобного?
Я особенно заинтересован в том, чтобы сделать это с помощью PHP.
2 ответа
Должно быть легко добавить путь к существующему URL и ожидаемому типу ресурса, учитывая приведенный выше базовый XML.
Если вы знакомы с 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 Schools: http://www.w3schools.com/xml/xml_whatis.asp
Вы также можете прочитать о потоковой передаче (SAX/StreamReader) и загрузке (DOM/XmlDocument). Xml: В чем разница между SAX и DOM?
Я также могу привести пример на Java, если вы считаете, что это будет полезно.
Не уверен, что вы решили свою проблему, поэтому вот решение 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
)