Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SimpleXML PHP解析_Php_Namespaces_Simplexml - Fatal编程技术网

SimpleXML PHP解析

SimpleXML PHP解析,php,namespaces,simplexml,Php,Namespaces,Simplexml,这是一个重复的问题,只是不是为了这个问题是关闭的。 终于找到了答案,即使在这里也是如此。 实际副本: 编辑:如果你仔细阅读这个问题,你会发现它不是重复的。“可能重复”的答案不是我问题的答案 再一次: 我对$value=$record->children('cap',true)->$title没有问题(这是所有“可能重复”的答案) 当带有冒号的标记中有其他标记时,我遇到了一个问题 <tag:something>hello</tag:something> //I parse

这是一个重复的问题,只是不是为了这个问题是关闭的。 终于找到了答案,即使在这里也是如此。 实际副本:

编辑:如果你仔细阅读这个问题,你会发现它不是重复的。“可能重复”的答案不是我问题的答案

再一次:
我对
$value=$record->children('cap',true)->$title没有问题(这是所有“可能重复”的答案)
当带有冒号的标记中有其他标记时,我遇到了一个问题

<tag:something>hello</tag:something> //I parse out hello (this is the 'duplicate questions' answer that I don't need answered)

<tag:something>
 <stuff>hello</stuff> //I cannot grab this. Explanation below.
</tag:something>
PHP代码:

ini_set('display_errors','1');

$alert_url = 'http://alerts.weather.gov/cap/us.php?x=1';

$alert_string_xml = file_get_contents($alert_url);

$alert_simple_xml_object = simplexml_load_string($alert_string_xml);

$count = 0;

$tag_entry = 'entry';
$tag_summary = 'summary';
$tag_cap = 'cap';
$tag_event = 'event';
$tag_certainty = 'certainty';
$tag_areaDesc = 'areaDesc';
$tag_geocode = 'geocode';
$tag_value = 'value';

foreach ($alert_simple_xml_object->$tag_entry as $record)
{
    $count++;

    $array = array();
    $array[] = $record->$tag_summary;
    $array[] = $record->children($tag_cap, true)->$tag_event;
    $array[] = $record->children($tag_cap, true)->$tag_certainty;
    $array[] = $record->children($tag_cap, true)->$tag_areaDesc;
    $array[] = $record->children($tag_cap, true)->$tag_geocode->$tag_value;
    //$array[] = $record->children($tag_cap, true)->$tag_geocode->$tag_value[0]; //doesnt work either


    echo $array[4]; //nothing is echoed

}
最新尝试:
我阅读了更多关于名称空间的内容,对它们有了更好的理解。我甚至尝试了我认为更好的解决方案:

//inside the above foreach loop
    $namespaces = $record->getNameSpaces(true);
    $caap = $record->children($namespaces['cap']);
    echo $caap->event; //works (but the first way works too)
    echo $caap->geocode->value; //(STILL does not work. Nothing is echoed)

我不明白为什么我不能从包含名称空间的父标记的子标记中获取任何数据。

cap:stuff
是根标记,因此您可以通过以下方式访问元素:

$xml = simplexml_load_string($your_xml);
$value_name_0 = $xml->valueName[0];
$value_0 = $xml->value[0];
$value_name_1 = $xml->valueName[1];
$value_1 = $xml->value[1];

您可能正在寻找函数。有两个示例,足以解决您的问题

如果您禁用了错误和警告,您面临的问题就不那么明显了:

命名空间错误:未定义stuff上的命名空间前缀上限

如果启用了错误,您将看到该消息。因为simplexml无法正确解析名称空间前缀
cap
,它将被删除

因此,您可以直接访问它:

$xml->stuff->value[1]
类似的。考虑下面的代码示例(:


如果您感觉到某些东西应该可以工作,但它不能工作,则始终需要仔细查看。一个选项是以XML形式再次回送字符串,以查看simplexml解析的内容,另一个选项是启用错误报告并查找警告和错误,它们通常包含更多信息。

children()
不是PHP函数。您不能调用未定义的函数。因此,您的代码已被破坏。请更正它,使您所尝试的内容更加清晰。children是SimpleXML函数更正?我在问题中添加了一些信息。是的,这是
SimpleXMLElement
的一种方法,请注意该问题不是重复的。如果我需要,请类似于此信息的信息我可以获取。但我无法从中的标记获取任何信息。例如100。我无法获取100。您是对的,它不是完全重复的。但它也是;)-我现在添加了一个答案,应该可以详细解释:-使用您的早期版本,此问题没有发生,因为根元素不是子元素,而是根元素,所以根元素不“计数”,因此
children
无论如何都不是正确的函数。这就是为什么我写了我早些时候的评论,认为这应该没有问题。仔细观察之后,很明显,如果不是根元素,这就是一个问题。有关详细信息,请参阅答案。对不起,我的问题中没有足够的信息。我编辑了这个问题。不管怎样,我答案中的代码都可以。它没有。没有回声。我有错误,我没有得到那个错误。我会再次更新我的问题,这正是我正在做的。我试着让这个问题更容易理解,这肯定让它更难回答。是的,写一个好问题确实不容易。编辑:对于错误报告,您缺少一个
错误报告(~0)这样你就可以看到所有的警告和通知。问题得到了改进。你的答案行不通。打印
echo$alert\u simple\u xml\u object->asXML()时,我没有收到任何错误即使添加
错误报告(~0)。当
echo$array[4]
$xml->stuff->value[1]
$xml = simplexml_load_string('<entry>
 <cap:stuff>
  <valueName>aaa</valueName>
  <value>000</value>
  <valueName>bbb</valueName>
  <value>111</value>
 </cap:stuff>
</entry>');

echo "\nResult:", $xml->stuff->value[1], "\n\n";
echo "XML:\n", $xml->asXML();
Warning: simplexml_load_string(): namespace error : Namespace prefix cap on \ 
                                  stuff is not defined on line 10
Warning: simplexml_load_string():  <cap:stuff> on line 10
Warning: simplexml_load_string():            ^ on line 10

Result:111

XML:
<?xml version="1.0"?>
<entry>
 <stuff>
  <valueName>aaa</valueName>
  <value>000</value>
  <valueName>bbb</valueName>
  <value>111</value>
 </stuff>
</entry>