在PHP中读取此XML结构
等等 我知道如果所有信息都在一个元素中,那么我就可以循环元素,获取属性和输出在PHP中读取此XML结构,php,xml,Php,Xml,等等 我知道如果所有信息都在一个元素中,那么我就可以循环元素,获取属性和输出 但是关于这个我一点也不知道,所以希望你能帮助我。嗯。。。真的有开发人员称之为xml结构吗?xD 有几种方法可以处理这些垃圾。我更喜欢正则表达式: 这一个应该符合您的要求: ProduktID 1, has name CreamCheese Cake and it's price is 4.10 ProduktID 3, has name Gujarati unlimited and it's price is 50.0
但是关于这个我一点也不知道,所以希望你能帮助我。嗯。。。真的有开发人员称之为xml结构吗?xD 有几种方法可以处理这些垃圾。我更喜欢正则表达式: 这一个应该符合您的要求:
ProduktID 1, has name CreamCheese Cake and it's price is 4.10
ProduktID 3, has name Gujarati unlimited and it's price is 50.00
这应该适用于preg_match_all,但它未经测试
致以最良好的祝愿 嗯。。。真的有开发人员称之为xml结构吗?xD 有几种方法可以处理这些垃圾。我更喜欢正则表达式: 这一个应该符合您的要求:
ProduktID 1, has name CreamCheese Cake and it's price is 4.10
ProduktID 3, has name Gujarati unlimited and it's price is 50.00
这应该适用于preg_match_all,但它未经测试
致以最良好的祝愿 这里有一个解决方案:
当然,这种XML看起来真的很奇怪(所以我和@Armin的观点一样)。它看起来像是“手工制作”的,没有那些花哨的XML工具/库,而是通过字符串连接或使用echo
进行渲染 这里有一个解决方案:
当然,这种XML看起来真的很奇怪(所以我和@Armin的观点一样)。它看起来像是“手工制作”的,没有那些花哨的XML工具/库,而是通过字符串连接或使用
echo
进行渲染 XML的结构非常糟糕-将订单上的每个产品都放在一个正确的结构中会使这变得容易得多
但这是有效的(使用):
$myxml='1!'
2.
3.
1.
奶油干酪蛋糕
4.10
1.
3.
古吉拉特邦无限公司
50
1.
5.
奶酪炸薯条
4.10
1.
';
$xml=simplexml\u load\u字符串($myxml);
$count=1;
foreach($xml->product_id作为$prod){
$pn=$xml->xpath('/order/product_name'.$count);
$price=$xml->xpath('/order/product\u price'$count);
$pq=$xml->xpath('/order/product\U Qty'$count);
echo“ProduktID$prod,名称为$pn[0],其价格为$price[0],存在$pq[0]时间”;
$count++;
}
工作示例:XML的结构非常糟糕-将订单上的每个产品都放在正确的结构中会使这变得容易得多 但这是有效的(使用):
$myxml='1!'
2.
3.
1.
奶油干酪蛋糕
4.10
1.
3.
古吉拉特邦无限公司
50
1.
5.
奶酪炸薯条
4.10
1.
';
$xml=simplexml\u load\u字符串($myxml);
$count=1;
foreach($xml->product_id作为$prod){
$pn=$xml->xpath('/order/product_name'.$count);
$price=$xml->xpath('/order/product\u price'$count);
$pq=$xml->xpath('/order/product\U Qty'$count);
echo“ProduktID$prod,名称为$pn[0],其价格为$price[0],存在$pq[0]时间”;
$count++;
}
工作示例:这将解决您的问题,但我不喜欢这种XML格式
$myxml = '<?xml version="1.0"?>
<order>
<order_businessid>2</order_businessid>
<order_categoryid>3</order_categoryid>
<product_id>1</product_id>
<product_name1>CreamCheese Cake</product_name1>
<product_price1>4.10</product_price1>
<product_Qty1>1</product_Qty1>
<product_id>3</product_id>
<product_name2>Gujarati unlimited</product_name2>
<product_price2>50.00</product_price2>
<product_Qty2>1</product_Qty2>
<product_id>5</product_id>
<product_name3>Cheese French Frish</product_name3>
<product_price3>4.10</product_price3>
<product_Qty3>1</product_Qty3>
</order>';
$xml = simplexml_load_string($myxml);
$count=1;
foreach ($xml->product_id as $prod) {
$pn = $xml->xpath('/order/product_name'.$count);
$price = $xml->xpath('/order/product_price'.$count);
$pq = $xml->xpath('/order/product_Qty'.$count);
echo "ProduktID $prod, has name $pn[0] and it's price is $price[0] and exists $pq[0] time(s)".PHP_EOL;
$count++;
}
$xmlStr='1
2.
3.
1.
奶油干酪蛋糕
4.10
1.
3.
古吉拉特邦无限公司
50
1.
5.
奶酪炸薯条
4.10
1.
';
$xml=simplexml\u load\u字符串($xmlStr);
$pid=$pnam=$ppric='';
foreach($ky=>$node的xml){
$pid=($ky='product_id')?$node[0]:$pid;
$pnam=(strpos($ky,'product_name')==0)?$node[0]:$pnam;
$ppric=(strpos($ky,‘产品价格’)==0)?$node[0]:$ppric;
如果(STRPO($ky,‘产品价格’)==0){
echo“产品id$pid的名称为$pnam,其价格为$ppric
”;
}
}
这将解决您的问题,但我不喜欢这种XML格式
$myxml = '<?xml version="1.0"?>
<order>
<order_businessid>2</order_businessid>
<order_categoryid>3</order_categoryid>
<product_id>1</product_id>
<product_name1>CreamCheese Cake</product_name1>
<product_price1>4.10</product_price1>
<product_Qty1>1</product_Qty1>
<product_id>3</product_id>
<product_name2>Gujarati unlimited</product_name2>
<product_price2>50.00</product_price2>
<product_Qty2>1</product_Qty2>
<product_id>5</product_id>
<product_name3>Cheese French Frish</product_name3>
<product_price3>4.10</product_price3>
<product_Qty3>1</product_Qty3>
</order>';
$xml = simplexml_load_string($myxml);
$count=1;
foreach ($xml->product_id as $prod) {
$pn = $xml->xpath('/order/product_name'.$count);
$price = $xml->xpath('/order/product_price'.$count);
$pq = $xml->xpath('/order/product_Qty'.$count);
echo "ProduktID $prod, has name $pn[0] and it's price is $price[0] and exists $pq[0] time(s)".PHP_EOL;
$count++;
}
$xmlStr='1
2.
3.
1.
奶油干酪蛋糕
4.10
1.
3.
古吉拉特邦无限公司
50
1.
5.
奶酪炸薯条
4.10
1.
';
$xml=simplexml\u load\u字符串($xmlStr);
$pid=$pnam=$ppric='';
foreach($ky=>$node的xml){
$pid=($ky='product_id')?$node[0]:$pid;
$pnam=(strpos($ky,'product_name')==0)?$node[0]:$pnam;
$ppric=(strpos($ky,‘产品价格’)==0)?$node[0]:$ppric;
如果(STRPO($ky,‘产品价格’)==0){
echo“产品id$pid的名称为$pnam,其价格为$ppric
”;
}
}
我同意你的意见,但对此我无能为力。XML结构是由一个应用程序developerIm生成的,我同意您的意见,但对此我无能为力。XML结构是从一个应用程序开发人员那里得到的,这个应用程序开发人员的XML非常糟糕。使用相同的名称,并将元素分组在一起。例如,不知道产品名称3?只需使用name,并将所有产品数据作为元素/属性分组到单个product element下。这样的XML来自使用字符串而不是DOM方法创建XML的开发人员。仅仅因为它有标签,它就不能成为XML。这是一些非常糟糕的XML。使用相同的名称,并将元素分组在一起。例如,不知道产品名称3?只需使用name,并将所有产品数据作为元素/属性分组到单个product element下。这样的XML来自使用字符串而不是DOM方法创建XML的开发人员。仅仅因为它有标签,它就不能成为XML。
$doc = new DOMDocument();
$doc->load("order.xml");
$productList = array();
foreach($doc->documentElement->childNodes as $node) {
if($node->tagName == "product_id") {
$productList[] = array(
"id" => $node->textContent,
);
}
if(preg_match("/product_([A-Za-z_]+)(\d+)/", $node->tagName, $m)) {
$productList[$m[2] - 1][$m[1]] = $node->textContent;
}
}
foreach($productList as $product) {
echo "ProduktID ", $product["id"]
, ", has name ", $product["name"]
, " and it's price is ", $product["price"]
, " with quantity ", $product["Qty"]
, "\n";
}
$myxml = '<?xml version="1.0"?>
<order>
<order_businessid>2</order_businessid>
<order_categoryid>3</order_categoryid>
<product_id>1</product_id>
<product_name1>CreamCheese Cake</product_name1>
<product_price1>4.10</product_price1>
<product_Qty1>1</product_Qty1>
<product_id>3</product_id>
<product_name2>Gujarati unlimited</product_name2>
<product_price2>50.00</product_price2>
<product_Qty2>1</product_Qty2>
<product_id>5</product_id>
<product_name3>Cheese French Frish</product_name3>
<product_price3>4.10</product_price3>
<product_Qty3>1</product_Qty3>
</order>';
$xml = simplexml_load_string($myxml);
$count=1;
foreach ($xml->product_id as $prod) {
$pn = $xml->xpath('/order/product_name'.$count);
$price = $xml->xpath('/order/product_price'.$count);
$pq = $xml->xpath('/order/product_Qty'.$count);
echo "ProduktID $prod, has name $pn[0] and it's price is $price[0] and exists $pq[0] time(s)".PHP_EOL;
$count++;
}
$xmlStr = '<?xml version="1.0"?>
<order>
<order_businessid>2</order_businessid>
<order_categoryid>3</order_categoryid>
<product_id>1</product_id>
<product_name1>CreamCheese Cake</product_name1>
<product_price1>4.10</product_price1>
<product_Qty1>1</product_Qty1>
<product_id>3</product_id>
<product_name2>Gujarati unlimited</product_name2>
<product_price2>50.00</product_price2>
<product_Qty2>1</product_Qty2>
<product_id>5</product_id>
<product_name3>Cheese French Frish</product_name3>
<product_price3>4.10</product_price3>
<product_Qty3>1</product_Qty3>
</order>';
$xml = simplexml_load_string($xmlStr);
$pid = $pnam = $ppric = '';
foreach($xml as $ky=>$node) {
$pid = ( $ky == 'product_id') ? $node[0] : $pid ;
$pnam = (strpos($ky, 'product_name') === 0) ? $node[0] : $pnam;
$ppric = (strpos($ky, 'product_price') === 0) ? $node[0] : $ppric;
if( strpos($ky, 'product_price') === 0) {
echo "product id $pid has name $pnam and its price is $ppric <br>";
}
}