如何从XML获取值

时间:2015-12-18 05:18:59

标签: php xml

我正在使用PHP。我是XML的新手。我想将所有值设置为变量以在其他地方使用。

例如,<property name="HoldType" value="4" /> 我想将$ holdtype_value设置为等于4.

进一步复杂化; <property class="Action0">有一个名为=&#34; Class&#34;的子属性,Action1属性也是如此。我需要这些值的变量。

以下是XML中的示例项。有些项目具有或多或少的属性。

    <item id="24" name="hoe">
    <property name="Meshfile" value="Items/Tools/hoe_iron" />
    <property name="Material" value="metal" />
    <property name="HoldType" value="4" />
    <property name="Stacknumber" value="1" />
    <property name="RepairTools" value="forgedIron" />
    <property name="Degradation" value="300" param1="true" />
    <property name="SoundDestroy" value="wooddestroy1" />
    <property name="FuelValue" value="24" />
    <property name="Weight" value="32" />
    <property class="Action0">
        <!-- AttackAction -->
        <property name="Class" value="Melee" />
        <property name="Delay" value="2.1" />
        <property name="Range" value="2" />
        <property name="Sphere" value="0.2" />
        <property name="Block_range" value="4" />
        <property name="DamageEntity" value="5" />
        <property name="DamageBlock" value="1" />
        <property name="Sound_start" value="swoosh" />
        <property name="Stamina_usage" value="8" />
        <property name="DamageBonus.earth" value="2" />
        <property name="DamageBonus.glass" value="25" />
        <property name="DamageBonus.head" value="4" />
    </property>
    <property class="Action1">
        <!-- UseAction -->
        <property name="Class" value="MakeFertile" />
        <property name="Delay" value="2.1" />
        <property name="Block_range" value="4" />
        <property name="DamageBlock" value="1" />
        <property name="Sound_start" value="swoosh" />
        <property name="Sound_end" value="UseActions/repair_block" />
        <property name="Fertileblock" value="fertileFarmland" />
        <property name="Adjacentblock" value="dirt" />
    </property>
    <property name="Group" value="Tools/Traps" />
    <property class="Preview">
        <property name="Zoom" value="0" />
        <property name="Pos" value="0,0" />
    </property>
    <property name="ActionSkillGroup" value="Mining Tools"/>
    <property name="CraftingSkillGroup" value="Tool Smithing"/>
</item>

1 个答案:

答案 0 :(得分:0)

您需要使用DOM,特别是DOMDocument::loadXML()进行调查:http://php.net/manual/en/domdocument.loadxml.php

这将允许您加载文档,然后以各种方式遍历它,设置元素(节点),属性等。从文档加载XML字符串的快速示例......

$doc = new DOMDocument();
$doc->loadXML('<root><node/></root>');
/* ... traverse the document here ... do your stuff ... */
echo $doc->saveXML();

PHP中有大量关于DOM支持的帮助文档,tuts等。

编辑: 以上内容适用于您将遇到的95%的XML,但如果您要加载大量XML文件,那么我想要不要看PHP的SimpleXML。 DOM一次加载整个文档,而SimpleXML允许您一次遍历一行文档。这意味着大文件没有内存问题。