Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中读取此XML结构_Php_Xml - Fatal编程技术网

在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>";
    }
}