【问题标题】:PHP SimpleXmlElement Grouping Empty XML ElementsPHP SimpleXmlElement 对空 XML 元素进行分组
【发布时间】:2015-01-08 21:32:50
【问题描述】:

我从 Web 服务获取 XML,并且很难维护显示的 XML 元素的顺序。

这是一个sn-p:

    <Blocks>
      <Block>
         <BlockElements>
            <Question QuestionID="QID59" />
            <PageBreak />
            <Question QuestionID="QID3" />
            <Question QuestionID="QID1" />
            <PageBreak />
            <Question QuestionID="QID2" />
            <PageBreak />
            <Question QuestionID="QID47" />
         </BlockElements>
      </Block>
      <Block>
         <BlockElements>
            <Question QuestionID="QID6" />
            <PageBreak />
            <Question QuestionID="QID8" />
            <Question QuestionID="QID49" />
            <Question QuestionID="QID45" />
            <Question QuestionID="QID50" />
            <PageBreak />
            <Question QuestionID="QID9" />
            <Question QuestionID="QID10" />
            <PageBreak />
            <Question QuestionID="QID11" />
            <Question QuestionID="QID12" />
            <PageBreak />
            <Question QuestionID="QID13" />
            <PageBreak />
            <Question QuestionID="QID14" />
            <PageBreak />
            <Question QuestionID="QID15" />
            <PageBreak />
            <Question QuestionID="QID16" />
            <PageBreak />
            <Question QuestionID="QID17" />
            <PageBreak />
            <Question QuestionID="QID18" />
            <Question QuestionID="QID19" />
            <PageBreak />
            <Question QuestionID="QID20" />
            <Question QuestionID="QID21" />
            <PageBreak />
            <Question QuestionID="QID22" />
            <Question QuestionID="QID23" />
         </BlockElements>
      </Block>
    </Blocks>

Web 服务使用空元素和(没有结束标签的元素)。 BlockElements 标签中这些元素的顺序至关重要——它定义了表单的布局。当我使用 SimpleXmlElement 将此 XML 转换为 PHP 对象时,这就是我得到的:

SimpleXMLElement Object
(
    [Block] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [BlockElements] => SimpleXMLElement Object
                        (
                            [Question] => Array
                                (
                                    [0] => SimpleXMLElement Object
                                        (
                                            [@attributes] => Array
                                                (
                                                    [QuestionID] => QID59
                                                )
                                        )
                                    [1] => SimpleXMLElement Object
                                        (
                                            [@attributes] => Array
                                                (
                                                    [QuestionID] => QID3
                                                )
                                        )
                                    [2] => SimpleXMLElement Object
                                        (
                                            [@attributes] => Array
                                                (
                                                    [QuestionID] => QID1
                                                )
                                        )
                                    [3] => SimpleXMLElement Object
                                        (
                                            [@attributes] => Array
                                                (
                                                    [QuestionID] => QID2
                                                )
                                        )
                                    [4] => SimpleXMLElement Object
                                        (
                                            [@attributes] => Array
                                                (
                                                    [QuestionID] => QID47
                                                )
                                        )
                                )
                            [PageBreak] => Array
                                (
                                    [0] => SimpleXMLElement Object
                                        (
                                        )
                                    [1] => SimpleXMLElement Object
                                        (
                                        )
                                    [2] => SimpleXMLElement Object
                                        (
                                        )
                                )
                        )
                )
....

Question 元素和 PageBreak 元素被分成数组,它们的顺序丢失了。关于维护这些元素的顺序有什么建议吗?我不承诺使用 SimpleXmlElement——我会使用任何有效的方法。谢谢!

【问题讨论】:

    标签: php arrays xml object


    【解决方案1】:

    您必须知道该对象的迭代结果与'print_r'或'var_dump'的结果不同

    试试这个

    $parentNode = simplexml_load_string($xml);
    itNode($parentNode);
    
    function itNode($parentNode){
     if($parentNode->children())
      foreach ( $parentNode->children() as $node )
      {
         echo "name ==> " , $node->getName(),'<br>';
         itNode($node);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多