- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试使用 SimpleXML 生成 RSS Google Merchant。
Google给出的样本是:
<?xml version="1.0"?>
<rss version="2.0"
xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>The name of your data feed</title>
<link>http://www.example.com</link>
<description>A description of your content</description>
<item>
<title>Red wool sweater</title>
<link> http://www.example.com/item1-info-page.html</link>
<description>Comfortable and soft, this sweater will keep you warm on those cold winter nights.</description>
<g:image_link>http://www.example.com/image1.jpg</g:image_link> <g:price>25</g:price> <g:condition>new</g:condition> <g:id>1a</g:id>
</item>
</channel>
</rss>
我的代码是这样的:
$product->addChild("g:condition", 'new');
生成:
<condition>new</condition>
我在网上看到我应该改用:
$product->addChild("g:condition", 'new', 'http://base.google.com/ns/1.0');
现在生成:
<g:condition xmlns:g="http://base.google.com/ns/1.0">new</g:condition>
这对我来说似乎非常违反直觉,因为现在“xmlns”声明几乎出现在我的 RSS 提要的每一行上,而不是在根元素中只有一次。
我错过了什么吗?
最佳答案
正如@ceejayoz 所说,您需要将“http://base.google.com/ns/1.0”命名空间添加到根节点,以便 SimpleXML 知道命名空间已经声明并且不会发出重复的前缀绑定(bind)。
我认为您可能需要阅读 tutorial on XML Namespaces ,因为我不确定您是否真的理解“g:”在这里的作用。
这是一个更完整的例子。XML:
$xml = <<<EOT
<?xml version="1.0"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>The name of your data feed</title>
<link>http://www.example.com</link>
<description>A description of your content</description>
<item>
<title>Red wool sweater</title>
<link> http://www.example.com/item1-info-page.html</link>
<description>Comfortable and soft, this sweater will keep you warm on those cold winter nights.</description>
<g:image_link>http://www.example.com/image1.jpg</g:image_link>
<g:price>25</g:price>
<g:id>1a</g:id>
</item>
</channel>
</rss>
EOT
;
代码:
$rss = new SimpleXMLElement($xml);
$NS = array(
'g' => 'http://base.google.com/ns/1.0'
);
$rss->registerXPathNamespace('g', $NS['g']);
$product = $rss->channel->item[0]; // example
// Use the complete namespace.
// Don't add "g" prefix to element name--what prefix will be used is
// something SimpleXML takes care of.
$product->addChild('condition', 'new', $NS['g']);
echo $rss->asXML();
我通常使用这种模式来轻松处理命名空间:
$rss = new SimpleXMLElement($xml);
$NS = array(
'g' => 'http://base.google.com/ns/1.0'
// whatever other namespaces you want
);
// now register them all in the root
foreach ($NS as $prefix => $name) {
$rss->registerXPathNamespace($prefix, $name);
}
// Then turn $NS to an object for more convenient syntax
$NS = (object) $NS;
// If I need the namespace name later, I access like so:
$element->addChild('localName', 'Value', $NS->g);
关于PHP 的 SimpleXML : How to use colons in names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3018808/
这里发生了什么事? $string = XML; $xml = simplexml_load_string($string); // $xmlobj = sim
当我将 SimpleXML 解析为对象数组的一部分的字符串时,我一直坚持让 SimpleXML 返回一个对象。 $a = '1145869290false43false'; $resultA = si
我有两个 SimpleXML 对象。如何将一个对象添加为另一个对象的子元素。 请注意,这不能通过 addChild 方法完成,因为它会在添加之前将给定值转换为字符串。 最佳答案 我发现 SimpleX
http://pastie.org/1701923这是从我查询邮政编码的 API 返回的 XML。 我想从每个条目中提取数据,然后直接对其进行循环或将其放入我可以循环的数组中。我似乎无法正确处理。这是
这个问题在这里已经有了答案: remove xml version tag when a xml is created in php (10 个答案) 关闭 7 年前。 我使用 SimpleXML
与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据。 SimpleXML 可把 XML 文档(或 XML 字符串)转换为对象,比如:
我有一些看起来像这样的 XML: true 42 ;jsessionid=42 SimpleXML 以这种方式解析它: $obj
我有一个具有命名空间属性的 XML 文档。 XML 看起来像: 我如何提取 and
我想从元素id的属性创建一个数组,但是以下代码返回所有XML。 PHP文件: $xmlfile=simplexml_load_file("test.xml"); $test=$xmlfile->xpa
我有一个看起来像这样的XML结构: 0 Some survey question Answer 1 0 Answ
我正在尝试访问具有命名空间声明的节点中没有命名空间声明的节点列表。我的 XML 文件有一个带有命名空间 ehd 的主节点,在同一命名空间内有两个子节点 header、body。但是,主体节点内的所有子
我正在使用 SimpleXML 和 XPath 尝试获取子节点('IndexEntry)属性('indexKey')的值。节点的命名空间,我已在另一个节点(“记录”)上成功测试。由于某种原因,该节点的
我有两棵 XML 树,想将一棵树作为叶子添加到另一棵树上。 显然: $tree2->addChild('leaf', $tree1); 不起作用,因为它仅复制第一个根节点。 好吧,所以我想我应该遍历整
我正在使用 SimpleXML http://simple.sourceforge.net/home.php 在我的 Android 应用程序中, 我从 API 获取数据如下:
我想使用 SimpleXML 读取并解析包含员工信息的 XML 文件。框架。这是我的 XML 文件: 29 Pankaj
我正在尝试在 android 中使用 simplexml 解析此 xml 字符串: " " 是的,我知道门标签应该立即关闭,而不是在声明所有门标签后关闭,我无法控制这个
我有一个具有这种结构的 XML 文件:
请,我需要解析包含汽车信息的 XML 文件。我在汽车、照片中完成了所有操作,但我需要在额外的表中包含 id、汽车表 id 的外键,并且所有汽车都有随机的 Equipment_id。 我需要将其放入“设
我有一个看起来像这样的 xml: 在 xml 映射 java 代码中我有这样的东西: public class A { @Element(required=false)
我有一个xml文档如下: Calculations Description First Description Alan
我是一名优秀的程序员,十分优秀!