0

我正在使用 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 />';

    } 

我的 XML 如下所示

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

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

在阅读了那个 XMLfeed 之后,XML 提要应该在 <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 格式显示数据

4

1 回答 1

1

您可以将DOM与 SimpleXML 一起使用。

这是你应该做的:

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

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

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

  4. 使用 DOM 的dom_import_simplexml(),将SimpleXMLElement StockStatus标签转换为DOMElement.

  5. ProductURL使用 DOM 的createElement()创建元素并插入我们之前创建的 url。

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

这个问题应该向您展示如何转换为 aDOMElement并最终进行插入。

于 2012-07-14T09:42:21.757 回答