这是XML
<us:ItemMaster>
<us:ItemMasterHeader>
<oa:ItemID agencyRole="Product_Number">
<oa:ID>9227950</oa:ID>
</oa:ItemID>
<oa:ItemID agencyRole="Prefix_Number">
<oa:ID>AAG</oa:ID>
</oa:ItemID>
<oa:ItemID agencyRole="Stock_Number_Butted">
<oa:ID>5035</oa:ID>
</oa:ItemID>
<oa:ItemID agencyRole="Manufacturer_Sku_Number">
<oa:ID>5035</oa:ID>
</oa:ItemID>
</us:ItemMasterHeader>
</us:ItemMaster>
我想提取 Product_Number,Prefix_Number,Stock_Number_Butted和Manufacturer_Sku_Number 。
你能建议如何在php中使用正则表达式吗?
我不想为此使用xml解析器,这是非常冗长的,因为我有很多大的xml文件需要处理。
谢谢!
对于那些寻求相同的人 找到 xpath 是最好的方法,我发现此链接非常有用。 这是代码:
<?php
echo "<pre>";
$info = array();
$xmlStr = file_get_contents("http://officedealersolution.highviews.co.cc/sftp/ecdb.individual_items/AAG5035.xml");
$xml = new SimpleXMLElement($xmlStr);
$res = $xml->xpath("//us:DataArea/us:ItemMaster/us:ItemMasterHeader/oa:ItemID[@agencyRole=\"Product_Number\"]/oa:ID");
$info['Product_Number'] = $res[0];
$res = $xml->xpath("//us:DataArea/us:ItemMaster/us:ItemMasterHeader/oa:ItemID[@agencyRole=\"Prefix_Number\"]/oa:ID");
$info['Prefix_Number'] = $res[0];
$res = $xml->xpath("//us:DataArea/us:ItemMaster/us:ItemMasterHeader/oa:ItemID[@agencyRole=\"Stock_Number_Butted\"]/oa:ID");
$info['Stock_Number_Butted'] = $res[0];
$res = $xml->xpath("//us:DataArea/us:ItemMaster/us:ItemMasterHeader/oa:ItemID[@agencyRole=\"Manufacturer_Sku_Number\"]/oa:ID");
$info['Manufacturer_Sku_Number'] = $res[0];
print_r($info);
echo "</pre>";
?>
输出:
Array
(
[Product_Number] => SimpleXMLElement Object
(
[0] => 9227950
)
[Prefix_Number] => SimpleXMLElement Object
(
[0] => AAG
)
[Stock_Number_Butted] => SimpleXMLElement Object
(
[0] => 5035
)
[Manufacturer_Sku_Number] => SimpleXMLElement Object
(
[0] => 5035
)
)
这是w3schools的一个非常好的xpath教程 http://www.w3schools.com/xpath/xpath_syntax.asp
答案 0 :(得分:1)
当你使用的只是锤子时,一切看起来像钉子。
正则表达式完全是错误的工具。使用PHP的XML扩展之一(例如DOMDocument)。
答案 1 :(得分:1)
如果文件是有效的 XML,则以下代码将获得您想要的内容假设$data
包含XML数据为字符串。
$xml = new SimpleXmlElement($data);
$nss = $xml->getNamespaces(true);
$us = $xml->children($nss['us']);
$im = $us->ItemMaster;
$imh = $im->ItemMasterHeader;
$oa = $imh->children($nss['oa']);
$parsed_data=array();
foreach($oa->ItemID as $item_id){
$attr = $item_id->attributes();
$role = (string)($attr->agencyRole);
$id = (string)($item_id->ID);
$parsed_data[$role] = $id;
}
print_r($parsed_data);