另外一个n00b:)
我有一个看起来像这样的xml文件:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE BPS SYSTEM "bpml.dtd">
<BPS Created="2012-04-24 11:40:41">
<Machine SerialNumber="" Site="" SoftwareRelease="MAP_248204031" VersionInfo="" Name="" Type="BPS200">
<ParameterSection Number="6" StartTime="2012-04-24 11:23:01" EndTime="1970-01-01 00:00:00">
<Operator></Operator>
<HeadercardUnit HeaderCardID="1706539" DepositID="01706539" StartTime="2012-04-24 11:39:57" MilliSec="0" EndTime="2012-04-24 11:40:40" Rejects="NO">
<Counter Currency="HRK" DenomID="22550" Value="200" Quality="Fit" Output="Stacked" Number="192"></Counter>
<Counter Currency="HRK" DenomID="22550" Value="200" Quality="Unfit" Output="Stacked" Number="7"></Counter>
</HeadercardUnit>
</ParameterSection>
</Machine>
</BPS>
我需要将值放到mysql db中,但我不知道如何从该xml中读取嵌套值。
这是我到目前为止所做的只是为了看看发生了什么:
$xml = @simplexml_load_file($filename);
if ($xml !== FALSE) {
$row[] = $xml->Machine->ParameterSection->HeadercardUnit; // tried to throw values in the array - no go
foreach ($row as $item) {
echo 'item: ' . $item . "<br>";
}
}
但这不起作用。
这是我的插入声明:
INSERT INTO counttable (DenomID, Quality, Number, headercard) VALUES (22550, 'Fit', 192, 1706539)
可能使用XML的关联数组值。像这样的东西
$count = array('HeaderCardID'='1706539', 'DenomID'='22550', 'Quality'='Fit', 'Number'='192')
然后:
INSERT INTO counttable (DenomID, Quality, Number, headercard) VALUES ('$count[1]', '$count[2]', '$count[3]', '$count[0]')
对于xml中的每个Counter行,等等。它可以是单个xml中的许多Counter行。
答案 0 :(得分:1)
尝试以下方法:
<?php
$xml = @simplexml_load_file('asd.xml');
if ($xml !== FALSE) {
foreach ($xml as $key => $item) {
foreach($item->attributes() as $attr => $val){
print_r($val);
}
}
}
?>
根据您的需要进行调整。
$key
是&#34; element2&#34;和&#34; element3&#34 ;;
$item
是元素本身;
$attr
是keyXY(例如key21,key22);
$val
是属性valueXY的值(例如value21,value22)。
答案 1 :(得分:1)
如果节点存在,不进行任何额外检查,我相信这应该是它。
诀窍是获取HeadercardUnit的子代并迭代它们。然后,您可以获取每个Counter元素的属性。属性有一个名称,但该值是PHP SimpleXMLElement实例。为了得到一个好的值,我们将它转换为字符串。
你最终会得到一个阵列数组。其中每一个都可以保存在数据库中。
$xml = @simplexml_load_file($filename);
$to_save_array = [];
if($xml)
{
// looping all children, assumed it always exists
foreach($xml->Machine->ParameterSection->HeadercardUnit->children() as $counter)
{
// data of this Counter record
$record_data = [];
// getting the attributes
foreach($counter->attributes() as $name => $value)
{
// casting a SimpleXMLElement to string yields the text value of the node
$record_data[$name] = (string)$value;
}
$to_save_array[] = $record_data;
}
}
var_dump($to_save_array);
希望有所帮助