2

私は Python 3.2 を使用しており、次のxml.etree.ElementTreeような XML を生成しようとしています。

<XnaContent xmlns:data="Model.Data">
    <Asset Type="data:MyData">
        ...

形式が制御不能です (XNA です)。dataXML 名前空間は、要素や属性を修飾するために実際に使用されることはなく、属性値を XNA に修飾するために使用されることに注意してください。私のコードは次のようになります。

root = Element('XnaContent')
ET.register_namespace('data', 'Model.Data') 
asset = SubElement(root, 'Asset', {"Type": "data:MyData"})

ただし、出力は次のようになります(私がかなり印刷しました):

<XnaContent>
    <Asset Type="data:MyData">
        ...
    </Asset>
</XnaContent>

data出力に含まれる XML 名前空間を取得するにはどうすればよいですか?

4

2 に答える 2

2
>>>print ET.tostring(doc, pretty_print=True)
<XnaContent>
  <Asset Type="data:MyData"/>
  <Asset Type="data:MyData"/>
</XnaContent>
>>> tree=ET.ElementTree(doc)
>>> root=tree.getroot()
>>> nsmap=root.nsmap
>>> nsmap['data']="ModelData"
>>> new_root = ET.Element(root.tag, nsmap=nsmap)
>>> print ET.tostring(new_root, pretty_print=True)
<XnaContent xmlns:data="ModelData"/>
>>> new_root[:] = root[:]
>>> print ET.tostring(new_root, pretty_print=True)
<XnaContent xmlns:data="ModelData">
  <Asset Type="data:MyData"/>
  <Asset Type="data:MyData"/>
</XnaContent>
于 2012-10-20T12:12:31.730 に答える
1
import xml.etree.ElementTree as ET
content = '''
<XnaContent>
  <Asset Type="data:MyData"/>
  <Asset Type="data:MyData"/>
</XnaContent>'''
doc = ET.fromstring(content)
ET.register_namespace('data','ModelData')
tree = ET.ElementTree(doc)
root = tree.getroot()
root.tag = '{ModelData}XnaContent'
print(ET.tostring(root, method = 'xml'))

収量

<data:XnaContent xmlns:data="ModelData">
      <Asset Type="data:MyData" />
      <Asset Type="data:MyData" />
    </data:XnaContent>
于 2012-10-20T13:05:06.497 に答える