0

XML:

<?xml version="1.0" encoding="utf-8"?>
    <NConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <NDomain>ex1</NDomain>
            <Parameters>
                <version>p</version>
                <siteFolder>site1</siteFolder>
                <cssGeneral></cssGeneral>
                <cssLogin>l.css</cssLogin>
            </Parameters>
            <Database>
                <hostname>898</hostname>
                <username>j</username>
                <password>k</password>
                <name>n</name>
            </Database>
<NDomain>ex2</NDomain>
                <Parameters>
                    <version>p</version>
                    <siteFolder>site1</siteFolder>
                    <cssGeneral></cssGeneral>
                    <cssLogin>l.css</cssLogin>
                </Parameters>
                <Database>
                    <hostname>898</hostname>
                    <username>j</username>
                    <password>k</password>
                    <name>n</name>
                </Database>
        </NConfig>

ex1の下にあるすべてのノードを繰り返し調べたい

これまでのところ、これを行うことでノードに直接アクセスできます。

$xmldata  = simplexml_load_file("config.xml");

foreach($xmldata->Parameters as $item)
{
        echo "<p>Version: " . $item->version . "</p>";
        echo "<p>Site Folder: " . $item->siteFolder . "</p>";
}

ただし、ルートノード固有ではなく、リスト内のすべてのパラメーターを反復処理します。これどうやってするの?

4

2 に答える 2

1

<Parameters>とが対応するものに固有である場合は、<Database>次のようなurxml<NDomain>スキーマを使用することをお勧めします。

     <NDomain>
            <name>ex1</name>
            <Parameters>
                <version>p</version>
                <siteFolder>site1</siteFolder>
                <cssGeneral></cssGeneral>
                <cssLogin>l.css</cssLogin>
            </Parameters>
            <Database>
                <hostname>898</hostname>
                <username>j</username>
                <password>k</password>
                <name>n</name>
            </Database>
      </NDomain>
      <NDomain>
        <name>ex2</name>
                <Parameters>
                    <version>p</version>
                    <siteFolder>site1</siteFolder>
                    <cssGeneral></cssGeneral>
                    <cssLogin>l.css</cssLogin>
                </Parameters>
                <Database>
                    <hostname>898</hostname>
                    <username>j</username>
                    <password>k</password>
                    <name>n</name>
                </Database>
      </NDomain>

したがって、次のように解析できます。

   foreach($xmldata->NDomain as $item)
   {
     $par = $item->Parameters;
    echo "<p>Version: " . $par->version . "</p>";
    echo "<p>Site Folder: " . $par->siteFolder . "</p>";
   }
于 2012-07-25T12:54:31.300 に答える
0

次のように、ルートノードの子を反復処理できます。

$first = true;
foreach($xmldata->children() as $item)
{
    if( $first === true) { 
        $first = false;
        continue;
    }
}

そのループは、、、およびをキャッチする<NDomain>ため<Parameters><Database>最初の反復をスキップしてを省略するための簡単なチェックが必要になります<NDomain>

于 2012-07-25T12:32:37.407 に答える