【问题标题】:Parse XML value based on attribute根据属性解析 XML 值
【发布时间】:2014-07-09 08:14:25
【问题描述】:
<ITEMS>
 <ITEM ItemID="XY">
 <ItemSearchName />
 <ITEMDESCRIPTION>
      <DESCRIPTION descriptionType="T" descriptionTypeTitle="Short" languageId="1" language="English">English description</DESCRIPTION>
      <DESCRIPTION descriptionType="T" descriptionTypeTitle="Short" languageId="2" language="France">Fance description</DESCRIPTION>
 </ITEMDESCRIPTION>
 <ItemType>B</ItemType>
 <ItemDepartment />
 <ITEMDIMENSIONS>
      <ItemDimensionUOM>m</ItemDimensionUOM>
 </ITEMDIMENSIONS>
 <ItemGrossWeihgt>0.00</ItemGrossWeihgt>
 </ITEM>
</ITEMS>

这是我使用 simplexml 方法解析的 XML 文件的示例。我确实使用此代码读取了 ItemID 属性值(只是一个示例):

 $item->attributes()->ItemID

我的问题是,如何在DESCRIPTION属性languageId = 1下访问DESCRIPTION?

我可以用 foreach 做到这一点:

foreach ($item->ITEMDESCRIPTION->DESCRIPTION as $desc) {
                if ($desc['languageId'] == '1') {
                    echo "<td>" . $desc . "</td>";
                }
}

但我不想使用 foreach。

另一种可能性是这样的:

$desc2 = $item->ITEMDESCRIPTION->DESCRIPTION[1];

但这只是第一个说明,而不是属性 languageId = 1 的说明。

感谢您的任何建议!

【问题讨论】:

    标签: php xml xml-parsing simplexml


    【解决方案1】:

    您也可以使用xpath 来获取特定值。示例:

    $xml_string = '<ITEMS> <ITEM ItemID="XY"> <ItemSearchName /> <ITEMDESCRIPTION> <DESCRIPTION descriptionType="T" descriptionTypeTitle="Short" languageId="1" language="English">English description</DESCRIPTION> <DESCRIPTION descriptionType="T" descriptionTypeTitle="Short" languageId="2" language="France">Fance description</DESCRIPTION> </ITEMDESCRIPTION> <ItemType>B</ItemType> <ItemDepartment /> <ITEMDIMENSIONS> <ItemDimensionUOM>m</ItemDimensionUOM> </ITEMDIMENSIONS> <ItemGrossWeihgt>0.00</ItemGrossWeihgt> </ITEM></ITEMS>';
    $xml = simplexml_load_string($xml_string);
    $value = $xml->xpath('//ITEMDESCRIPTION/DESCRIPTION[@languageId="1"]')[0];
    echo (string) $value; // English description
    

    或者只是简单的foreach:

    foreach($xml->ITEM->ITEMDESCRIPTION->DESCRIPTION as $desc) {
        if($desc->attributes()['languageId'] == 1) {
            echo (string) $desc; // English description
        }
    }
    

    【讨论】:

    • $value = $xml-&gt;xpath('ITEMDESCRIPTION/DESCRIPTION[@languageId="1"]'); echo $value[0]; echo $value[1]; ...完成了这项工作。感谢您的帮助!
    • 确定@Iztok没问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多