예제로, XSD 형태의 아마존 상품 스키마를 사용했다.
내부 보안 문서라 부분 샘플링 했다.
내부 보안 문서라 부분 샘플링 했다.
* xsd : Xml Schema Definition
먼저 xsd 파일을 읽는다.
from bs4 import BeautifulSoup
bs = BeautifulSoup(open('sample.xsd'))
상품 데이터 명세의 속성 값을 불러 온다.
for i in bs.find('xsd:element',{'name':'Product'}).find_all('xsd:sequence')[0]:
if i.name != 'xsd:element':
continue
try:
if i.has_attr('ref'): print (i.get('ref'))
if i.has_attr('name'): print (i.get('name'))
except Exception as e:
print (e)
pass
* find_all의 매칭 block은 다음과 같은 성질을 가진다.
- xml 예제 구조 : block1 { block2{} block{3} }
- find_all 반환 리스트 구조 : [ block1{ block2{} block3{} }, block2{}, block3{} ]
상상의 날개를 펼쳐본다.
- 스트링 (string)
- 정규식 (regular expression)
- 리스트 (list)
- 함수 (function)
import re
def foo(tag):
return tag.name == 'xsd:sequence'
for i in bs.find(re.compile('x\w+:element'),{'name': lambda x: x == 'Product'}).find_all([foo,'xsd:sequence'])[1]:
if i.name != 'xsd:element':
continue
try:
if i.has_attr('ref'): print (i.get('ref'))
if i.has_attr('name'): print (i.get('name'))
except Exception as e:
print (e)
pass
* 다양한 필터 타입이 find 유사 메소드(Method)들의 태그(tag), 속성(attribution)에 적용 가능하다.
응용 코드를 공유한다.
아마존(amazon) MWS(Marketplace Web Service)의 Sellers API 사용시, 데이터 명세 xsd 파일의 레벨(Level) 단위 속성을 추출하는 코드다.--------- filename : sample.xsd -----------
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="Product">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="SKU"/>
<xsd:element ref="StandardProductID" minOccurs="0"/>
<xsd:element name="GtinExemptionReason" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="bundle"/>
<xsd:enumeration value="part"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element ref="RelatedProductID" minOccurs="0"/>
<xsd:element ref="ProductTaxCode" minOccurs="0"/>
<xsd:element name="LaunchDate" type="xsd:dateTime" minOccurs="0"/>
<xsd:element name="OffAmazonChannel" minOccurs="0">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="advertise"/>
<xsd:enumeration value="exclude"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:element>
<xsd:complexType name="Dimensions">
<xsd:sequence>
<xsd:element name="Length" type="LengthDimension" minOccurs="0"/>
<xsd:element name="Width" type="LengthDimension" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
0 개의 댓글:
댓글 쓰기