XML,我有:
<?xml version="1.0" encoding="windows-1252" ?>
- <Tables>
- <Table name="I_BOOKING">
- <Row action="UPDATE" success="Y">
<Field name="AUTOBOOK">888800</Field>
<Field name="TOUROP">01</Field>
<Field name="REFERENCE">GSDFFD</Field>
<Field name="NBPAX">2</Field>
<Field name="NBINF">1</Field>
</Row>
</Table>
- <Table name="I_EXCDATERESA">
- <Row action="UPDATE" success="Y">
<Field name="EXCURS">KNO</Field>
<Field name="DATE">2012-04-12</Field>
<Field name="BOOKNR">125445</Field>
<Field name="NAME">TEST 12/4</Field>
<Field name="PICKUPTIME">00:00:00</Field>
</Row>
- <Row action="UPDATE" success="Y">
<Field name="EXCURS">KNO</Field>
<Field name="DATE">2012-04-13</Field>
<Field name="BOOKNR">14574575</Field>
<Field name="NAME">TEST 13/4</Field>
<Field name="PICKUPTIME">00:00:00</Field>
</Row>
</Table>
</Tables>
当我对待表I_EXCDATERESA
时,我需要获取字段BOOKNR
的值,因此在此示例中为125445
或14574575
,根据我的行在$autobook
处理并加载它:
...
$simplexml = simplexml_import_dom($dom);
foreach ($simplexml->Table as $value)
{
$tableName = $value->attributes()->name;
foreach ($value->Row as $value)
{
if ($tableName == 'I_EXCDATERESA')
{
if ($value->Field->attributes()->name == 'BOOKNR')
{
$autoBook = $value->Field;
这不起作用,$autobook
未加载,因为它不在第一个“字段”上,而是在第三个
答案 0 :(得分:2)
这是XPath的一个很好的用例:
$search = $simplexml->xpath('/Tables/Table[name="I_EXCDATERESA"]/Row/Field[name="BOOKNR"]');
答案 1 :(得分:1)
有很多方法可以解决这种情况
答案 2 :(得分:1)
测试一下,它对我有用:
foreach ($simplexml->Table as $value)
{
$tableName = $value->attributes()->name;
foreach ($value->Row as $value_1)
{
if ($tableName == 'I_EXCDATERESA')
{
foreach ($value_1->Field as $value_2)
{
if ($value_2->attributes()->name == 'BOOKNR')
{
$autoBook = $value_2[0];
echo $autoBook;
}
}
}
}
}
你的问题在于:
$value->Field->attributes()->name=='BOOKNR'
那太多了:我在elemts Row的每个字段上添加了另一个循环!
答案 3 :(得分:0)
$simplexml->xpath('/Tables/Table[name="I_EXCDATERESA"]/Row/Field[name="BOOKNR"]');
不起作用,你错过了@
$simplexml->xpath('/Tables/Table[@name="I_EXCDATERESA"]/Row/Field[@name="BOOKNR"]');