我有一个XML文件,如下所示:(fileName:abc.xml)
<Envelope>
<Body>
<SResponse>
<Body>
<SResponseDetails>
<SItem>...</SItem>
<SItem>...</SItem>
<SItem>...</SItem>
<SItem>...</SItem>
</SResponseDetails>
</Body>
</SResponse>
</Body>
</Envelope>
我想将所有<SItem>
存储在db表中(每个SItem有1条记录)。我正在使用PHP并使用XmlStringStreamer。
这是我读取此文件并进行处理的代码。
$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
}
我正在使用XmlStringStreamer,并没有从任何论坛得到任何答案,我也尝试但无法得到我想要的,所以有人可以帮助我。
非常感谢。
我已经解决了,这是我的答案。对于特定项的循环,我们可以直接在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标记转换为小写。像<SItem>
成为<sitem>
。那么,有谁知道这个问题?
我没有执行你的代码,但我认为你可以使用PHP逻辑。如果有什么不适合你,那么最后的解决方案将爆炸$simpleXmlNode
以获得一些数组结构,然后根据您的需要处理它。顺便问一下你能分享你在$simpleXmlNode = simplexml_load_string($node)
之后得到的东西吗?
对于其他人,我无法添加评论,因此将此作为答案发布。