Как разобрать / извлечь 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
)
Другие вопросы по тегам