dongwu1992 2013-06-19 09:26
浏览 60
已采纳

XML解析 - 无法检索节点的值

I'm trying to determine why it is that I can not get the value of a node within my XML file. I'm using the following PHP code to parse my XML file...

<?php
error_reporting(E_ALL); 
ini_set( 'display_errors','1');
libxml_use_internal_errors(true);
libxml_clear_errors();

// create the reader object
$reader = new XMLReader();

// reader the XML file.
$reader->open('test.xml');

// start reading the XML File.
while($reader->read()) {
    // take action based on the kind of node returned
   switch($reader->nodeType) {
       // read more http://uk.php.net/manual/en/class.xmlreader.php#xmlreader.constants.element
       case (XMLREADER::ELEMENT):
              // get the name of the node.
              $node_name = $reader->name;
              // move the pointer to read the next item
              $reader->read();
              // action based on the $node_name
              if ($node_name == 'PartNumber') {
                $reader->read();
                $data['PartNumber'] = $reader->value;
                var_dump($data);
              };
           break;
       case (XMLREADER::END_ELEMENT):
            // do something based on when the element closes.
            break;
   }
}

?>

An example of my XML data is below...

<Items>
  <Item MaintenanceType="C">
    <HazardousMaterialCode>N</HazardousMaterialCode>
    <ItemLevelGTIN GTINQualifier="UP">090127000380</ItemLevelGTIN>
    <PartNumber>0-1848-1</PartNumber>
    <BrandAAIAID>BBVL</BrandAAIAID>
    <BrandLabel>Holley</BrandLabel>
    <PartTerminologyID>5904</PartTerminologyID>
    <Descriptions>
      <Description MaintenanceType="C" DescriptionCode="DES" LanguageCode="EN">Street Carburetor</Description>
      <Description MaintenanceType="C" DescriptionCode="SHO" LanguageCode="EN">Crb</Description>
    </Descriptions>
    <Prices>
      <Pricing MaintenanceType="C" PriceType="JBR">
        <PriceSheetNumber>L30779-13</PriceSheetNumber>
        <CurrencyCode>USD</CurrencyCode>
        <EffectiveDate>2013-01-01</EffectiveDate>
        <Price UOM="PE">462.4600</Price>
      </Pricing>
      <Pricing MaintenanceType="C" PriceType="RET">
        <PriceSheetNumber>L30779-13</PriceSheetNumber>
        <CurrencyCode>USD</CurrencyCode>
        <EffectiveDate>2013-01-01</EffectiveDate>
        <Price UOM="PE">380.5500</Price>
      </Pricing>
      <Pricing MaintenanceType="C" PriceType="WD1">
        <PriceSheetNumber>L30779-13</PriceSheetNumber>
        <CurrencyCode>USD</CurrencyCode>
        <EffectiveDate>2013-01-01</EffectiveDate>
        <Price UOM="PE">314.4700</Price>
      </Pricing>
    </Prices>
    <ExtendedInformation>
      <ExtendedProductInformation MaintenanceType="C" EXPICode="CTO" LanguageCode="EN">US</ExtendedProductInformation>
      <ExtendedProductInformation MaintenanceType="C" EXPICode="NPC" LanguageCode="EN">A</ExtendedProductInformation>
      <ExtendedProductInformation MaintenanceType="C" EXPICode="HTS" LanguageCode="EN">8409914000</ExtendedProductInformation>
      <ExtendedProductInformation MaintenanceType="C" EXPICode="NAF" LanguageCode="EN">B</ExtendedProductInformation>
    </ExtendedInformation>
    <ProductAttributes>
      <ProductAttribute MaintenanceType="C" AttributeID="SKU" LanguageCode="EN">BBVL0-1848-1</ProductAttribute>
      <ProductAttribute MaintenanceType="C" AttributeID="ModDate" LanguageCode="EN">2012-12-31</ProductAttribute>
    </ProductAttributes>
    <Packages>
      <Package MaintenanceType="C">
        <PackageLevelGTIN>00090127000380</PackageLevelGTIN>
        <PackageUOM>EA</PackageUOM>
        <QuantityofEaches>1</QuantityofEaches>
        <Dimensions UOM="IN">
          <Height>7.5000</Height>
          <Width>11.0000</Width>
          <Length>12.2500</Length>
        </Dimensions>
        <Weights UOM="PG">
          <Weight>13.500</Weight>
          <DimensionalWeight>6.09</DimensionalWeight>
        </Weights>
      </Package>
    </Packages>
  </Item>
</Items>

The var_dump of $data shows the following...

array(1) { ["PartNumber"]=> string(0) "" }

There are no errors being reported.

May someone point me in the direction of what I'm missing?

  • 写回答

4条回答 默认 最新

  • dongying6896 2013-06-19 09:36
    关注

    You forgot to define $data = array();

    <?php
    error_reporting(E_ALL); 
    ini_set( 'display_errors','1');
    libxml_use_internal_errors(true);
    libxml_clear_errors();
    
    $data = array(); //notice this???
    
    // create the reader object
    $reader = new XMLReader();
    
    // reader the XML file.
    $reader->open('test.xml');
    
    // start reading the XML File.
    while($reader->read()) {
        // take action based on the kind of node returned
       switch($reader->nodeType) {
           // read more http://uk.php.net/manual/en/class.xmlreader.php#xmlreader.constants.element
           case (XMLREADER::ELEMENT):
                  // get the name of the node.
                  $node_name = $reader->name;
                  // move the pointer to read the next item
                  $reader->read();
                  // action based on the $node_name
                  if ($node_name == 'PartNumber') {
                    $reader->read();
                    $data['PartNumber'] = $reader->value;
                    var_dump($data);
                  };
               break;
           case (XMLREADER::END_ELEMENT):
                // do something based on when the element closes.
                break;
       }
    }
    
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 虚心请教几个问题,小生先有礼了
  • ¥30 截图中的mathematics程序转换成matlab