我想解析一些看起来像这样的XML:
<node>
This is
<child>
blah
</child>
some
<child>
foo
</child>
text
</node>
Run Code Online (Sandbox Code Playgroud)
如何在Simple XML中访问文本节点子节点?
我可以按正确的文本和元素子序列访问它们吗?
我需要一些其他包吗?
我使用以下PHP:
$xml = simplexml_load_file($request_url) or die("url not loading");
Run Code Online (Sandbox Code Playgroud)
我用:
$status = $xml->Response->Status->code;
Run Code Online (Sandbox Code Playgroud)
检查响应的状态.200 bening一切都好,继续.
但是,如果我收到403拒绝访问错误,我如何在PHP中捕获这个,以便我可以返回用户友好的警告?
我需要一个 XPath,它将选择所有父节点一个具有至少包含值列表之一的属性的子节点。
示例 XML
<mynodes>
<theParentNode>
<theChildNode name="one two" />
</theParentNode>
<theParentNode>
<theChildNode name="one all" />
</theParentNode>
<theParentNode>
<theChildNode name="two" />
</theParentNode>
<theParentNode>
<theChildNode name="all" />
</theParentNode>
</mynodes>
Run Code Online (Sandbox Code Playgroud)
我想选择名称包含“一个”或“所有”(或任何其他组合)的所有节点。所以返回的 nodeList 是:
<theParentNode>
<theChildNode name="one two" />
</theParentNode>
<theParentNode>
<theChildNode name="one all" />
</theParentNode>
<theParentNode>
<theChildNode name="all" />
</theParentNode>
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的查询看起来像这样(注意我没有使用架构):
//theChildNode[contains(tokenize(@name, '\s'), "one")]
这将使我获得所有在其名称属性中包含“一”的供应商元素。但我不确定如何提供多个值来代替“一个”,然后是回到theParentNode. 如果可能的话,我总是可以在 php 中完成所有这些,但 id 而不是仅使用 XPath 来完成。
我正在尝试访问下面元素中的数字,但是我无法从中获取值.
echo $object->0; //returns Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'
SimpleXMLElement Object (
[0:public] => 15810
)
Run Code Online (Sandbox Code Playgroud)
关于如何获得这个价值的任何想法?
更新
我意识到这是一个奇怪的错误......我正在使用ebay API来获取此值.即使我这样做:
$zero = 0;
$print_r($ruleXml->HourlyUsage->$zero);
Run Code Online (Sandbox Code Playgroud)
它仍然显示相同
SimpleXMLElement Object (
[0:public] => 15810
)
Run Code Online (Sandbox Code Playgroud)
我也试过{0}了
这是我正在使用的输出....
[1] => SimpleXMLElement Object (
[CallName:public] => AddItem
[CountsTowardAggregate:public] => false
[DailyHardLimit:public] => 100000
[DailySoftLimit:public] => 100000
[DailyUsage:public] => 0
[HourlyHardLimit:public] => 100000
[HourlySoftLimit:public] => 100000
[HourlyUsage:public] => 0
[Period:public] => -1
[PeriodicHardLimit:public] => 0 …Run Code Online (Sandbox Code Playgroud) 尝试将myXml.xml中的一些数据添加到字符串时,我收到以下错误:解析错误:语法错误,意外T_OBJECT_OPERATOR.
$xmlstr = file_get_contents('myXml.xml');
$xml = new SimpleXMLElement($xmlstr);
foreach($xml->order as $order){
$replace = array();
$firstName = (string) $order->billing-address->first-name;
$lastName = (string) $order->billing-address->last-name;
}
Run Code Online (Sandbox Code Playgroud)
我不能直接提供我的XML,因为它包含敏感数据.
谢谢,山姆
我想遍历以下 xml 文件中的每个 book_list,并为每个 book_list 循环遍历该 book_list 的每本书。
<inventory>
<book_list>
<book>
<author>Rowling</author>
<title>Harry Potter</title>
</book>
<book>
<author>Blyton</author>
<title>Famous 5</title>
</book>
</book_list>
<book_list>
<book>
<author>Bloggs</author>
<title>Learning XML</title>
</book>
<book>
<author>Jones</author>
<title>Beginning PHP</title>
</book>
</book_list>
</inventory>
Run Code Online (Sandbox Code Playgroud)
对于每个 book_list,我如何在 php simplexml 脚本中使用 xpath 遍历每本书?这是我的代码,
$booklistpath = $xml->xpath('//booklist');
foreach ($booklistpath as $booklist) {
$bookpath = $xml->xpath('//book');
foreach ($bookpath as $book) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
第一个循环很好,它通过每个book_list循环 - 但是嵌套循环,这意味着通过每个book特定的特定循环book_list通过整个文档中的每本书。我也试过:-
'.//book' and
'descendant::book'
Run Code Online (Sandbox Code Playgroud) 我知道有几次问过类似的问题,但我无法找到以下解决方案:
我有一个简单的XML文件:servers.xml
<servers>
<server>
<name> Google </name>
<address>http://www.google.com</address>
</server>
<server>
<name> Yahoo </name>
<address>http://www.yahoo.com</address>
</server>
<server>
<name> Bing </name>
<address>http://www.bing.com</address>
</server>
</servers>
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试获取<server>名称为"Google" 的节点,然后更改地址标记.我不知道如何使用SimpleXML去做.因此,示例场景如下:
任何帮助,将不胜感激.
我收到此错误:
调用非对象上的成员函数 addChild()
但 XML 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<urlset>
<url>
<loc>http://mysite.com/</loc>
<changefreq>weekly</changefreq>
<priority>1.00</priority>
</url>
</urlset>
Run Code Online (Sandbox Code Playgroud)
我正在这样做:
//APPEND TO SITEMAP
$file = '../sitemap.xml';
$xml = simplexml_load_file($file);
$urlset = $xml->urlset;
$urls = $urlset->addChild('url');
$urls->addAttribute("mongoID", $theAuthorUniqueMongoID);
$urls->addChild('loc', 'http://mysite.com/author/'.$authorLink.'/');
$urls->addChild('changefreq', 'monthly');
$urls->addChild('priority', '0.80');
$xml->asXML($file);
Run Code Online (Sandbox Code Playgroud)
我基本上只是在我的站点地图上添加一些内容。我从来都不擅长 XML,但我不确定我在这方面做错了什么。
我有一个问题让我摸不着头脑,我相信这是一个简单的解决方案,但对于我的生活,我找不到它。
我正在尝试使用 PHP 中的 XMLReader 计算 XML 文件的节点。直到现在还没有什么新鲜事,这里有很多关于如何做到这一点的例子。问题是所有示例都是从表示整个 XML 文件的字符串 (simplexml_load_string) 加载的。这很好用。但是,如果我尝试从文件加载,我会得到“预期的开始标签,‘<’ 未找到” SimpleXML 的异常。
这是代码:
$xml = simplexml_load_file($fname); //$fname is a valid xml file, it loads fine
$elem = new SimpleXMLElement($xml); //it chokes on this line
Run Code Online (Sandbox Code Playgroud)
从字符串加载它虽然有效,但我确实想从文件加载它:
$xml = simplexml_load_string($xmlstring); //$xmlstring is the content of the same xml file
Run Code Online (Sandbox Code Playgroud)
我错过了什么?谢谢你的帮助。
我需要从PHP拥有的另一个域中检索XML文件.
我正在使用simple_XML来执行此操作,但显然,禁用了跨域:
警告:simplexml_load_file()[function.simplexml-load-file]:在服务器配置中禁用URL文件访问
我无法访问服务器的配置(共享主机).
有关如何执行此操作的任何线索?