【问题标题】:Using SimpleXML in PHP with a Twist在 PHP 中使用 SimpleXML
【发布时间】:2012-07-14 09:26:45
【问题描述】:

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

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

在阅读 XML 提要后,XML 提要应显示之前的一些修改 &lt;StockStatus&gt;标签应该加标签

<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 格式显示数据

【问题讨论】:

  • 你的问题是?你试过什么? :)
  • 我看到一个错误:&lt;/&lt;All_Products&gt;
  • @MartinsBriedis 抱歉更新了代码
  • @phpdev 我添加了我尝试阅读 XML 和加载但如何阅读这 2 个特定标签的问题

标签: php simplexml


【解决方案1】:

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

这是你应该做的:

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

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

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

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

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

  6. 使用 DOM 的 insertBefore() 将其插入到 StockStatus 之前。

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

【讨论】:

  • 我一直尝试到第 3 步,效果很好我这样做了 $element = $dom->createElement('ProductURL', 'This is the root element!'); // 我们将新元素作为根(文档的子元素)插入 $dom->appendChild($element);但我不确定如何像 abc.com/<ProductName>-p/…> 那样动态创建该生产者 url
  • 你的第一步不起作用我尝试使用以下它没有挑选出产品标签 $result = $xml->xpath('/All_Products/Product'); while(list( , $node) = each($result)) { echo '/a/b/c: ',$node,"\n"; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 2015-09-23
相关资源
最近更新 更多