Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP XML读取多个节点_Php_Xml - Fatal编程技术网

PHP XML读取多个节点

PHP XML读取多个节点,php,xml,Php,Xml,我有一个如下所示的xml。如何解析这个?我不知道该怎么做? 奥泽利克和德格有时不同5,有时不同10。请帮帮我 <?xml version="1.0" encoding="UTF-8"?> <ROOT> <STOKLAR> <STOK> <SKU>1234</SKU> <OZELLIKLER> <OZELL

我有一个如下所示的xml。如何解析这个?我不知道该怎么做? 奥泽利克和德格有时不同5,有时不同10。请帮帮我

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
    <STOKLAR>
        <STOK>
            <SKU>1234</SKU>
            <OZELLIKLER>
                <OZELLIK>Ekran Kartı Belleği </OZELLIK>
                <DEGER>Paylaşımlı </DEGER>
            </OZELLIKLER>
        </STOK>
        <STOK>
            <SKU>1454</SKU>
            <OZELLIKLER>
                <OZELLIK>İşlemci Üreticisi </OZELLIK>
                <DEGER>Intel </DEGER>
                <OZELLIK>İşlemci Tipi </OZELLIK>
                <DEGER>Intel Core i5 </DEGER>
            </OZELLIKLER>
        </STOK>
    </STOKLAR>
</ROOT>

1234
埃克兰·卡尔特·贝勒奥伊
佩拉
1454
莱姆西·雷迪西
英特尔
勒姆奇·蒂皮
英特尔酷睿i5

使用DOM和Xpath表达式并不难:

$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMXpath($document);

// iterate STOK element nodes
foreach ($xpath->evaluate('/ROOT/STOKLAR/STOK') as $stok) {
    // fetch first SKU child element node as string
    var_dump($xpath->evaluate('string(SKU)', $stok));
    // iterate OZELLIK element nodes in OZELLIKLER
    foreach ($xpath->evaluate('OZELLIKLER/OZELLIK', $stok) as $ozellik) {
        var_dump(
            // content of current OZELLIK
            $ozellik->textContent, 
            // first following sibling element node, if DEGER, as string
            $xpath->evaluate('string((./following-sibling::*)[1][self::DEGER])', $ozellik)
        );
    }
}
输出:

string(4) "1234"
string(22) "Ekran Kartı Belleği "
string(14) "Paylaşımlı "
string(4) "1454"
string(21) "İşlemci Üreticisi "
string(6) "Intel "
string(15) "İşlemci Tipi "
string(14) "Intel Core i5 "
DOMXpath::evaluate()
可以根据表达式返回节点列表或标量值。第二个参数设置表达式的上下文节点。下面是最后一个(最复杂)表达式的说明:

  • 获取以下同级元素节点
    以下同级::*
  • 限制到第一个找到的节点(以下同级节点::*)[1]
  • 按节点名DEGER筛选
    (以下同级::*)[1][self::DEGER]
  • 返回此节点的文本内容,如果未找到节点,则返回空字符串
    字符串((以下同级::*)[1][self::DEGER])

默认情况下,表达式在“子”轴上工作。表达式使用另外两个轴“跟随兄弟”和“self”来查找所需的节点。

是ozellik和deger对吗?是的,一个ozellik和一个deger pairIt很奇怪,它们没有包装在另一个标记中。如果可以修改XML的结构,我建议这样做。顺便问一下,你的目标是什么?它来自公司,这就是为什么我不能修改你想要的产出的原因?