我刚接触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>
`
我需要使用ImageURL
中的BaseItemCode
的{{1}}在相关产品的ProductImage中获取ProductBaseCode
答案 0 :(得分:0)
如果您想读取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制成一个对象,然后转到要从中获取一些数据的对象中的位置。
如果不确定对象的结构如何,则始终可以打印对象。
答案 1 :(得分:0)
将模式嵌入实例文档中是很不寻常的。我认为您不需要它,我认为最好不要理会它。
让我感到困惑的是,您已经显示了ProductImage元素的架构,但是没有显示实际的ProductImage元素。它们是与Product元素位于同一文档中还是其他地方?
在PHP世界中,执行您描述的那种联接查询的最简单方法可能是使用XSLT。有一个内置的本地XSLT 1.0处理器,或者您可以安装Saxon / C,它具有一个PHP接口,可为您提供XSLT 3.0。它还为您提供XQuery,如果您是用SQL术语思考问题的人,则可能会感到更满意。我无法提供任何实际的XQuery代码来反映您的查询,因为我看不到数据来自何处。