0

XML の各ノードを通過できるようにしたいのですが、特定のユーザー名が見つかったら、そのノードからすべてのデータを読み取りたいと考えています。

例えば:

<Users>
   <User>
      <Username>admin</Username>
      <Server>10.x.x.x</Server>
   </User>
   <User>
      <Username>test</Username>
      <Server>11.x.x.x</Server>
   </User>
</Users>

Username=adminを見つけて、同じノードからサーバーを取得できるようにする必要があります。私は PHP を使用します。任意の 2 つの変数を保存して例を作成できます。

4

3 に答える 3

3

XpathDomDocumentを使用すると、次のような方法でうまくいくはずです。

$doc = new DOMDocument;
$doc->loadXML($xml); // Your xml string
$xpath = new DOMXpath($doc);

$query = '//Users/User/Username[. = "admin"]'; // Looking for user admin
$entries = $xpath->query($query);

foreach ($entries as $entry) {
    //Getting the "server" node value for "admin" user
    echo $entry->nextSibling->nextSibling->nodeValue; // Display 10.x.x.x
}
于 2012-09-11T08:50:45.493 に答える
1

このバリアントは機能します

$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadXML(file_get_contents('xpath.xml'));
$xpath = new DOMXPath($dom);
$query = '//Users/User/Username[text()="admin"]/following-sibling::Server';
echo $xpath->query($query)->item(0)->nodeValue;
于 2012-09-11T08:55:26.280 に答える
0

これらの行に沿って何かを試してください:

$input = '<Users>
   <User>
      <Username>admin</Username>
      <Server>10.x.x.x</Server>
   </User>
   <User>
      <Username>test</Username>
      <Server>11.x.x.x</Server>
   </User>
</Users>';

$xml = new SimpleXMLElement($input);

$result = $xml->xpath('/Users/User[Username="admin"]');
// Process $result to your liking..

簡単にするために、SimpleXMLElement を使用しました。より強力なツールが必要な場合は、 DomDocument とDOMXPathをご覧ください。

SimpleXML Xpathに関する詳細。

于 2012-09-11T08:45:13.890 に答える