【问题标题】:Recursively display nested XML and attributes PHP递归显示嵌套的 XML 和属性 PHP
【发布时间】:2019-02-02 02:33:42
【问题描述】:

这样做的最终目标是加载一个 XML 设置文件并能够通过 html 表单对其进行修改。我什至无法加载嵌套 XML 及其要打印的属性,这是我的第一步。

这是 XML 的一个片段:

<Settings>
    <GSettings>
        <Name Value="Plane"/>
        <Id Value="50"/>
        <Timeout Value="100"/>
    </GeneralSettings>
    <WingSetting>
        <LeftWing Color="Red" Value="1"/>
        <RightWing Value="0"/>
        <MiddleBar>
            <Fields>
                <Value>Direction</Value>
                <Value>Speed</Value>
                <Value>Height</Value>
            </Fields>
        </MiddleBar>
    </WingSetting>

因此,这样的目标是打印以下内容:

.GSettings.Name = 
ATTRIBUTES:
Value = Plane

.GeneralSettings.Id = 
ATTRIBUTES:
Value = 50

.GeneralSettings.Timeout = 
ATTRIBUTES:
Value = 100

.WingSetting.LeftWing =
ATTRIBUTES:
Value = 1
Color = Red

.WingSetting.RightWing =
ATTRIBUTES:
Value = 0


.WingSetting.MiddleBar=


.WingSetting.MiddleBar.Fields.Value=Direction

.WingSetting.MiddleBar.Fields.Value=Speed

.WingSetting.MiddleBar.Fields.Value=Height

我能够递归打印 XML 和子项,对于中间栏字段,我可以打印速度方向和高度。但我不知道如何获取属性并在我进行时打印它们。当前代码是这样的:

$xml=simplexml_load_file("MySettings.xml");
RecurseXML($xml);

function RecurseXML($xml,$parent="")
{
   $child_count = 0;
   foreach($xml as $key=>$value)
   {

      $child_count++;    
      if(RecurseXML($value,$parent.".".$key) == 0)  
      {

         echo($parent . "." . (string)$key . " = " . (string)$value . "<BR>\n");       
      }    
   }
   return $child_count;
} 

除了没有属性选项外,它完全按照我想要的方式打印它。我知道有一个 attributes() 选项,但我不知道如何添加它,所以它是递归的。关于如何添加它的任何想法?

【问题讨论】:

    标签: php xml recursion


    【解决方案1】:

    在 echo 行之后添加这段代码

         //  Get an array of attributes
         $attribs = $value->attributes();
         // If its not empty
         if(count($attribs)) {
             echo "ATTRIBUTES:<BR>\n";
         }
         // Output an each attribute value
         foreach($attribs as $k=>$v) {
             echo "$k = $v<BR>\n";
         }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-23
      • 2014-03-22
      • 1970-01-01
      • 2013-11-17
      • 2012-04-12
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      相关资源
      最近更新 更多