繁体   English   中英

使用XPath和PHP的XML解析处理空值

[英]XML parsing with XPath and PHP handle empty values

通过这样的XML树进行解析时:

<vco:ItemDetail>
    <cac:Item>
        <cbc:Description>ROLLENKERNSATZ 20X12 MM 10,5 GR.</cbc:Description>
        <cac:SellersItemIdentification>
            <cac:ID>78392636</cac:ID>
        </cac:SellersItemIdentification>
        <cac:ManufacturersItemIdentification>
            <cac:ID>RMS100400370</cac:ID>
            <cac:IssuerParty>
               <cac:PartyName>
                   <cbc:Name></cbc:Name>
               </cac:PartyName>
            </cac:IssuerParty>
        </cac:ManufacturersItemIdentification>
    </cac:Item>
    <vco:Availability>
       <vco:Code>available</vco:Code>
    </vco:Availability>
</vco:ItemDetail>

如果cbc:Name为空,我总是得到一个空格,它会破坏CSV结构,如下所示:

"ROLLENKERNSATZ 20X12 MM 10,5 GR.";78392636;;RMS100400370;"";available

“ available”字符串在新行中,因此不再构造我的CSV。

我的XPath数组如下所示:

$columns = array('Description' => 'string(cac:Item/cbc:Description)',
          'SellersItemIdentification' => 'string(cac:Item/cac:SellersItemIdentification/cac:ID)',
          'StandardItemIdentification' => 'string(cac:Item/cac:StandardItemIdentification/cac:ID)',
          'Availability' => 'string(vco:Availability/vco:Code)',
          'Producer' => 'string(cac:Item/cac:ManufacturersItemIdentification/cac:IssuerParty/cac:PartyName/cbc:Name');

我可以处理任何欺骗或替换,例如用“ no producer”替换空节点值或类似的东西吗?

谢谢

如果可以某种方式使要用作“默认”值的值存在于输入文档中的某处,则可以通过如下方式进行准解决:

例如

<vco:ItemDetail xmlns:vco="x1" xmlns:cac="x2" xmlns:cbc="x3">
   <ValueIfNoProducer>No Producer</ValueIfNoProducer>
   <cac:Item>
      ...

然后,如果Name元素为空或空白,则此Xpath 1.0将应用默认值:

(cac:Item/cac:ManufacturersItemIdentification/cac:IssuerParty
     /cac:PartyName/cbc:Name[normalize-space(.)] | ValueIfNoProducer)[1]

认为以下直接在XPath 2.0中是可能的,但我有待纠正:

(cac:Item/cac:ManufacturersItemIdentification/cac:IssuerParty
     /cac:PartyName/cbc:Name[normalize-space(.)] | 'No Producer')[1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM