0

xsdファイルがこのような場合

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xbrldt="http://xbrl.org/2005/xbrldt" xmlns:num="http://www.xbrl.org/dtr/type/numeric" xmlns:nonnum="http://www.xbrl.org/dtr/type/non-numeric" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:ifrs="http://xbrl.ifrs.org/taxonomy/2012-03-29/ifrs" targetNamespace="http://xbrl.ifrs.org/taxonomy/2012-03-29/ifrs" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
<xsd:import schemaLocation="http://www.xbrl.org/dtr/type/numeric-2009-12-16.xsd" namespace="http://www.xbrl.org/dtr/type/numeric"/> <xsd:import schemaLocation="http://www.xbrl.org/dtr/type/nonNumeric-2009-12-16.xsd" namespace="http://www.xbrl.org/dtr/type/non-numeric"/> 
<xsd:import schemaLocation="http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd" namespace="http://www.xbrl.org/2003/instance"/> <xsd:import schemaLocation="http://www.xbrl.org/2005/xbrldt-2005.xsd" namespace="http://xbrl.org/2005/xbrldt"/> 
<xsd:element xbrli:periodType="duration" type="nonnum:domainItemType" substitutionGroup="xbrli:item" nillable="true" name="AbnormallyLargeChangesInAssetPricesOrForeignExchangeRatesMember" id="ifrs_AbnormallyLargeChangesInAssetPricesOrForeignExchangeRatesMember" abstract="true"/> 
<xsd:element xbrli:periodType="duration" type="xbrli:monetaryItemType" substitutionGroup="xbrli:item" nillable="true" name="AccountingProfit" id="ifrs_AccountingProfit" xbrli:balance="credit"/> 
<xsd:element xbrli:periodType="instant" type="xbrli:monetaryItemType" substitutionGroup="xbrli:item" nillable="true" name="Accruals" id="ifrs_Accruals" xbrli:balance="credit"/> 
<xsd:element xbrli:periodType="instant" type="xbrli:monetaryItemType" substitutionGroup="xbrli:item" nillable="true" name="AccrualsClassifiedAsCurrent" id="ifrs_AccrualsClassifiedAsCurrent" xbrli:balance="credit"/> 
</xml>

この形式のdictが必要です

d={'AbnormallyLargeChangesInAssetPricesOrForeignExchangeRatesMember':{'xbrli:periodType':'duration','type':'nonnum:domainItemType','substitutionGroup':'xbrli:item'}}

このように、要素ごとに属性「name」をタグとして出力し、すべての属性をそのタグの値として残ります。

私は任意のxmlパーサーを使用しようとしていますが、re .......を使用する方法を知っていますが、任意のxmlパーサーを介してのみ必要です。

前もって感謝します

4

1 に答える 1

0

saxパーサーを使用します。

import xml.sax

class MyXsdHandler(xml.sax.handler.ContentHandler):
    def parse(self, f):
        self.result = {}
        s = open(f, "r").read()
        xml.sax.parseString(s, self)
        return self.result

    def startElement(self, name, attrs):
        if name == "xsd:element":
            d = dict(attrs)
            self.result[attrs["name"]] = d

results = MyXsdHandler().parse("myfile.xsd")

この場合、要素のディクショナリにはすべての属性が含まれています。自分で興味のあるものを選択するか、Python 3を使用している場合は、辞書の理解を使用して属性をフィルタリングできます。

interestingAttrs = ["type", ...] #all attributes you need
#inside the if in startElement
#python 2:
d = dict()
for a in interestingAttrs: d[a] = attrs[a]

#python 3:
d = {a: attrs[a] for a in interestingAttrs}

注意すべき重要な点の1つは、startElementの「attrs」オブジェクトは辞書ではなく、属性にアクセスするために同じように機能することです。ただし、実際に値を設定することはできず、dictの他の機能が不足しているため、属性を印刷するだけではない場合は、常に属性の辞書を作成する必要があります。

于 2012-06-29T11:34:09.957 に答える