在PHP中使用带有Twist的SimpleXML

时间:2012-07-14 09:26:46

标签: php simplexml

我使用SimpleXML加载远程XML

我的PHP代码如下所示

$xml = simplexml_load_file('http://www.abc.om/xml.php');

foreach( $xml as $Product )
    {
        echo 'ProductCode: '.$Product->ProductCode.'<br />';
        echo 'ProductName: '.$Product->ProductName.'<br />';

    } 

MY XML如下所示

<All_Products>
<Product>
<ProductCode>9978H</ProductCode>
<ProductName>abc with Buckle in aBlack</ProductName>
<StockStatus>2</StockStatus>
</Product>
</All_Products>

产品标签会重复,因为产品很多

在阅读了XMLfeed之后,XML Feed应该显示之前的一些修改 <StockStatus>标记应添加标记

<ProductURL><ProductURL>

该标签应显示为

<ProductURL>http://abc.com/abc with Buckle in aBlack-p/9978H.htm<ProductURL>

这意味着每个ProductURL都应作为

附加
<ProductURL>http://abc.com/<ProductName>-p/<ProductCode>.htm<ProductURL>

要显示的最终XML看起来像

<All_Products>
<Product>
<ProductCode>9978H</ProductCode>
<ProductName>abc with Buckle in aBlack</ProductName>
<ProductURL>http://abc.com/abc with Buckle in aBlack-p/9978H.htm<ProductURL>
<StockStatus>2</StockStatus>
</Product>
</All_Products>

所以我的问题是

1)我是否必须在foreach($ xml as $ Product)循环中读取Product标签的所有元素,然后附加ProductURL元素或者是否有任何快捷方式来执行此操作

2)一旦这个数据准备就绪,我如何再次以XML格式显示数据

1 个答案:

答案 0 :(得分:1)

您可以将DOM与SimpleXML结合使用。

这是你应该做的:

  1. 使用xpath()运行xpath查询,选择所有Product标记。这应该会返回一个代表每个SimpleXMLElement标记的Product个数组。

  2. 再次使用xpath()从每个Product标记中选择ProductCodeProductName并获取其内容。创建您的网址并将其保存到变量。

  3. 使用xpath()选择StockStatus标记。

  4. 使用DOM dom_import_simplexml(),将SimpleXMLElement StockStatus代码转换为DOMElement

  5. 使用DOM的createElement()创建ProductURL元素,然后插入我们之前创建的网址。

  6. 使用DOM insertBefore()StockStatus之前插入。

  7. question应该会告诉您如何转换为DOMElement并最终进行插入。