3

私は以下の XML ファイルを持っています。現在、minidom を使用しています。例documentElementでは、 が定義を無視しているため、参照が無視tagNameされていることがわかります。xyz:widget!ENTITY!DOCTYPE

!ENTITY 定義と !DOCTYPE 参照が無視されないように、 ドキュメント タイプ定義をサポートする XML パーサーは次のうちどれですか。

<?xml version="1.0" standalone="yes" ?>
<!DOCTYPE widget [
<!ENTITY widgets-ns "http://www.w3.org/ns/widgets">
<!ENTITY pass "pass&amp;.html">
]>
<xyz:widget xmlns:xyz="&widgets-ns;">
  <xyz:content src="&pass;"/>
  <xyz:name>bv</xyz:name>
</xyz:widget>

XMLしたがって、上記の例では、python を使用して同等のものを取得できます。

<widget xmlns="http://www.w3.org/ns/widgets">
  <content src="pass&amp;.html"/>
  <name>bv</name>
</widget>

またはDOMdocumentElementaswidgetとそのchildNodesas content、およびvalueなどnamewidget属性を持つ を取得します。xmlnshttp://www.w3.org/ns/widgets

おそらく正しい用語を使用していない可能性がありますが、上記の例の助けを借りて自分自身を明確にしたことを願っています.

4

1 に答える 1

6

LXMLはこれを問題なく処理します。

>>> from lxml import etree
>>> s = """<?xml version="1.0" standalone="yes" ?>
... <!DOCTYPE widget [
... <!ENTITY widgets-ns "http://www.w3.org/ns/widgets">
... <!ENTITY pass "pass&amp;.html">
... ]>
... <xyz:widget xmlns:xyz="&widgets-ns;">
...   <xyz:content src="&pass;"/>
...   <xyz:name>bv</xyz:name>
... </xyz:widget>
... """
>>> etree.fromstring(s)
<Element {http://www.w3.org/ns/widgets}widget at 7f4de2cc58e8>
>>> etree.fromstring(s).xpath("//xyz:content/@src",
...                           namespaces={"xyz": "http://www.w3.org/ns/widgets"})
['pass&.html']
于 2012-10-04T15:55:52.933 に答える