我使用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格式显示数据
答案 0 :(得分:1)
您可以将DOM与SimpleXML结合使用。
这是你应该做的:
使用xpath()运行xpath查询,选择所有Product
标记。这应该会返回一个代表每个SimpleXMLElement
标记的Product
个数组。
再次使用xpath()从每个Product
标记中选择ProductCode
和ProductName
并获取其内容。创建您的网址并将其保存到变量。
使用xpath()选择StockStatus
标记。
使用DOM dom_import_simplexml(),将SimpleXMLElement
StockStatus
代码转换为DOMElement
。
使用DOM的createElement()创建ProductURL
元素,然后插入我们之前创建的网址。
使用DOM insertBefore()在StockStatus
之前插入。
此question应该会告诉您如何转换为DOMElement
并最终进行插入。