在PHP中使用XmlStringStreamer循环遍历XML节点

在PHP中使用XmlStringStreamer循环遍历XML节点,php,xml,Php,Xml,我有一个类似以下内容的XML文件: (文件名:abc.xml) 我正在使用XmlStringStreamer,并没有从任何论坛得到任何答案,我也尝试过,但无法得到我想要的,所以,有人可以帮助我 非常感谢。我没有执行您的代码,但我认为您可以使用PHP逻辑。如果有什么不适合您,那么最后一个解决方案将是分解$simpleXmlNode,以获得一些数组结构,然后根据您的需要进行处理。顺便问一下,你能分享一下你在$simpleXmlNode=simplexml\u load\u string($node)

我有一个类似以下内容的XML文件: (文件名:abc.xml)

我正在使用XmlStringStreamer,并没有从任何论坛得到任何答案,我也尝试过,但无法得到我想要的,所以,有人可以帮助我


非常感谢。

我没有执行您的代码,但我认为您可以使用PHP逻辑。如果有什么不适合您,那么最后一个解决方案将是分解
$simpleXmlNode
,以获得一些数组结构,然后根据您的需要进行处理。顺便问一下,你能分享一下你在
$simpleXmlNode=simplexml\u load\u string($node)
之后得到的东西吗


对于其他人,我不能添加评论,所以将此作为答案发布

我已经解决了,下面是我的答案。 对于特定项目的循环,我们可以直接在xmlStringSteamer中使用:

$stream = new Stream\File(__DIR__ . "/abc.xml", 1024);
$options = array(
    "uniqueNode" => "SItem"
);
$parser = new Parser\UniqueNode($options);

// Create the streamer
$streamer = new XmlStringStreamer($parser, $stream);

$countNodes = 0;
while ($node = $streamer->getNode())
{
    print_r($node);
}

唯一的问题是它将xml标记转换为小写。像
变成
。所以,有人知道这个问题吗?

对于处理,我也在while循环中尝试了这个方法:foreach($simpleXmlNode->SResponse->Body->SResponseDetails->SItem as$item),我得到了xmlObject中的每个节点,因此,我使用asXML()将xml对象转换为xml函数,但它将字符转换为小写。能否提供$simpleXmlNode示例值?我会看看是否有时间为您验证它?您能告诉我如何在不将文本更改为小写的情况下使用asXML()。它正在将xml标记转换为小写。
$streamer = \Prewk\XmlStringStreamer::createStringWalkerParser(__DIR__ . "/tempFile.xml");
$stream = new Stream\File(__DIR__ . "/abc.xml", 1024);
$parser = new Parser\StringWalker();
$streamer = new XmlStringStreamer($parser, $stream);
while ($node = $streamer->getNode()) {
    $simpleXmlNode = simplexml_load_string($node);
    //-- code here for getting single node
}
$stream = new Stream\File(__DIR__ . "/abc.xml", 1024);
$options = array(
    "uniqueNode" => "SItem"
);
$parser = new Parser\UniqueNode($options);

// Create the streamer
$streamer = new XmlStringStreamer($parser, $stream);

$countNodes = 0;
while ($node = $streamer->getNode())
{
    print_r($node);
}