首页 > 解决方案 > 在 PHP 中获取 XML 模式值

问题描述

我是 XML 新手,今天我被困了将近一个星期。

据我了解,我有一个包含架构和 xml 元素的 XML 文件。我正在尝试获取架构中定义的值并使用它们,我也想知道如何加入 xml 元素,就像我在 mysql 或 sql 中所说的那样, join table a with table b where a.id=b.a_id但在这种情况下使用 xml 元素。

这是我的结构:

和 Product 对象如下:

`<xs:element name="ProductImage">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ProductBaseCode" default="">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="15" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="ImageName">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="255" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="IsDefaultImage" type="xs:boolean" />
            <xs:element name="ImageWidth" type="xs:int" />
            <xs:element name="ImageHeight" type="xs:int" />
            <xs:element name="ImageUrl">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="255" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
</xs:element>

<Product>
    <Name>Pad Printing</Name>
    <Description>Pad Printing</Description>
    <Price>0.8</Price>
    <Flags>1</Flags>
    <BaseItemCode>PA</BaseItemCode>
    <Id>1b9d8241-61c8-47cd-baf5-d9258cbc4734</Id>
    <ColourName/>
</Product>

`

我需要使用in 获取相关产品的in ImageURLProductImageBaseItemCodeProductBaseCodeProductImage

标签: phpxml

解决方案


如果您想读取 XML 中的数据,可以使用 simplexml_load_string。

你可以这样做:

    $xml = "<xs:element name="ProductImage">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ProductBaseCode" default="">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="15" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="ImageName">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="255" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="IsDefaultImage" type="xs:boolean" />
            <xs:element name="ImageWidth" type="xs:int" />
            <xs:element name="ImageHeight" type="xs:int" />
            <xs:element name="ImageUrl">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="255" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
</xs:element>

<Product>
    <Name>Pad Printing</Name>
    <Description>Pad Printing</Description>
    <Price>0.8</Price>
    <Flags>1</Flags>
    <BaseItemCode>PA</BaseItemCode>
    <Id>1b9d8241-61c8-47cd-baf5-d9258cbc4734</Id>
    <ColourName/>
</Product>"

$xmlData = simplexml_load_string($xml);

$imageurl = $xmldata['xs:element']['xs:element'][5]['@attributes']['name'];

所以基本上你把 XML 变成一个对象,然后去对象中你想要一些数据的地方。

如果你不确定你的对象结构是怎样的,你总是可以打印对象。


推荐阅读