我有一个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并且没有从任何论坛得到任何答案,我也试过但是无法得到我想要的,有人可以帮助我。
非常感谢。
答案 0 :(得分:1)
我已经解决了,这是我的答案。 对于特定项的循环,我们可以直接在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>
。那么,有人对这个问题有所了解吗?
答案 1 :(得分:0)
我没有执行你的代码,但我认为你可以使用PHP逻辑。如果有什么不适合你,那么最后的解决方案将爆炸$simpleXmlNode
以获得一些数组结构,然后根据您的需要进行处理。那么你可以分享$simpleXmlNode = simplexml_load_string($node)
之后得到的东西吗?
对于其他人,我无法添加评论,因此将其作为答案发布。