标签: simplexml

如何解析XML以使用SimpleXML获取多个文本块?

我想解析一些看起来像这样的XML:

<node>
  This is
  <child>
    blah
  </child>
  some
  <child>
    foo
  </child>
  text
</node>
Run Code Online (Sandbox Code Playgroud)

如何在Simple XML中访问文本节点子节点?

我可以按正确的文本和元素子序列访问它们吗?

我需要一些其他包吗?

php xml parsing simplexml

1
推荐指数
1
解决办法
1354
查看次数

PHP simplexml_load_file捕获403

我使用以下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中捕获这个,以便我可以返回用户友好的警告?

php xml simplexml http-status-code-403

1
推荐指数
1
解决办法
3765
查看次数

使用包含多个值的 XPath 查询

我需要一个 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 来完成。

php xml xpath simplexml

1
推荐指数
1
解决办法
9008
查看次数

访问SimpleXMLElement中的数字属性

我正在尝试访问下面元素中的数字,但是我无法从中获取值.

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)

php simplexml

1
推荐指数
1
解决办法
2073
查看次数

解析错误:语法错误,意外T_OBJECT_OPERATOR

尝试将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,因为它包含敏感数据.

谢谢,山姆

php xml simplexml

1
推荐指数
1
解决办法
1万
查看次数

php 和 xpath - 循环遍历特定元素的子元素

我想遍历以下 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)

php xpath simplexml

1
推荐指数
1
解决办法
5436
查看次数

通过SimpleXML PHP编辑XML节点

我知道有几次问过类似的问题,但我无法找到以下解决方案:

我有一个简单的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去做.因此,示例场景如下:

  1. 获取服务器对象/数组,其中$ serverName ="Google"
  2. 将服务器的地址字段编辑为与http://www.google.co.uk不同的地方
  3. 将更改写回XML文件.

任何帮助,将不胜感激.

php xml simplexml xml-parsing

1
推荐指数
1
解决办法
4224
查看次数

在非对象 PHP 上调用成员函数 addChild()

我收到此错误:

调用非对象上的成员函数 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 xml simplexml

1
推荐指数
1
解决办法
4574
查看次数

从文件加载时使用 SimpleXMLElement

我有一个问题让我摸不着头脑,我相信这是一个简单的解决方案,但对于我的生活,我找不到它。

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

1
推荐指数
1
解决办法
2794
查看次数

禁用Simple_XML跨域文件访问

我需要从PHP拥有的另一个域中检索XML文件.

我正在使用simple_XML来执行此操作,但显然,禁用了跨域:

警告:simplexml_load_file()[function.simplexml-load-file]:在服务器配置中禁用URL文件访问

我无法访问服务器的配置(共享主机).

有关如何执行此操作的任何线索?

php simplexml cross-domain

0
推荐指数
1
解决办法
1981
查看次数