Вы можете сделать это в php следующим образом:
<?php
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<suite id="1" name="SuiteName">
<displayNameKey>something</displayNameKey>
<displayName>something</displayName>
<application id="2" name="Manager">
<displayNameKey>appName</displayNameKey>
<displayName>appName</displayName>
<category id="12" name="navigation">
<displayNameKey>managerNavigation</displayNameKey>
<displayName>managerNavigation</displayName>
<description>mgr_navigation</description>
<property id="13" name="httpPort" type="integer_property" width="40">
<displayNameKey>managerHttpPort</displayNameKey>
<displayName>managerHttpPort</displayName>
<value>80</value>
</property>
<property id="14" name="httpsPort" type="integer_property" width="40">
<displayNameKey>managerHttpsPort</displayNameKey>
<displayName>managerHttpsPort</displayName>
<value>443</value>
</property>
<property id="15" name="welcomePageURI" type="url_property" width="40" hidden="true">
<displayNameKey>welcomePageURI</displayNameKey>
<displayName>welcomePageURI</displayName>
<value>jsp/index.jsp</value>
</property>
<property id="16" name="serverURL" type="url_property" width="40">
<displayNameKey>serverURL</displayNameKey>
<displayName>serverURL</displayName>
<value>somevalue</value>
</property>
</category>
<category id="17" name="datafiltering">
<displayNameKey>managerDataFiltering</displayNameKey>
<displayName>managerDataFiltering</displayName>
<description>mgr_data_filtering</description>
<property id="18" name="defaultTableName" type="string_property" width="40">
<displayNameKey>defaultTableName</displayNameKey>
<displayName>defaultTableName</displayName>
</property>
<property id="19" name="defaultAudienceName" type="string_property" width="40">
<displayNameKey>defaultAudienceName</displayNameKey>
<displayName>defaultAudienceName</displayName>
</property>
</category>
</application>
</suite>
XML;
function genXpath($xml, $att, $current = null)
{
if($current == null) $current = '/*';
$new = $current.'[@'.$att.']';
$result = $xml->xpath($new);
if($current[strlen($current) - 1] == '*')
{
$current = substr($current, 0, strlen($current) - 1);
}
if(count($result))
{
foreach($result as $node)
{
$prev = $current;
$current .= $node->getName().'[@'.$att.'="'.$node->attributes()->$att.'"]/*';
genXpath($xml, $att, $current);
$current = $prev;
}
}
else
{
$current = substr($current, 0, strlen($current) - 1);
echo $current.'<br />';
}
}
// how to use
$xml = new SimpleXMLElement($xml);
genXpath($xml, "name");
?>
Он выдаст что-то вроде этого:
/suite[@name="SuiteName"]/application[@name="Manager"]/category[@name="navigation"]/property[@name="httpPort"]
/suite[@name="SuiteName"]/application[@name="Manager"]/category[@name="navigation"]/property[@name="httpsPort"]
/suite[@name="SuiteName"]/application[@name="Manager"]/category[@name="navigation"]/property[@name="welcomePageURI"]
/suite[@name="SuiteName"]/application[@name="Manager"]/category[@name="navigation"]/property[@name="serverURL"]
/suite[@name="SuiteName"]/application[@name="Manager"]/category[@name="datafiltering"]/property[@name="defaultTableName"]
/suite[@name="SuiteName"]/application[@name="Manager"]/category[@name="datafiltering"]/property[@name="defaultAudienceName"]
Надеюсь, это поможет.А также вы можете установить желаемое имя атрибута.
Сама функция и ее использование:
<?php
function genXpath($xml, $att, $current = null)
{
if($current == null) $current = '/*';
$new = $current.'[@'.$att.']';
$result = $xml->xpath($new);
if($current[strlen($current) - 1] == '*')
{
$current = substr($current, 0, strlen($current) - 1);
}
if(count($result))
{
foreach($result as $node)
{
$prev = $current;
$current .= $node->getName().'[@'.$att.'="'.$node->attributes()->$att.'"]/*';
genXpath($xml, $att, $current);
$current = $prev;
}
}
else
{
$current = substr($current, 0, strlen($current) - 1);
echo $current.'<br />';
}
}
// how to use
$xml = "your xml string"; // you can read it from a file
$xml = new SimpleXMLElement($xml);
genXpath($xml, "name");
Алгоритм - вот что важно, вы можете легко перенести его в любойдругой язык программирования.Все, что нужно, - это поддержка xpath, и чтобы изменить способ получения информации из результата, полученного с помощью запроса xpath.
С уважением,слепая