<p>Hello, I&#39;m new with python and especially with Biopython. I&#39;m trying to take some information from an XML file with <code>Entrez.efetch</code> and then read it. Last week this script worked well:</p>

<pre>
<code>handle = Entrez.efetch(db=&quot;Protein&quot;, id=&quot;YP_008872780.1&quot;, retmode=&quot;xml&quot;)
records = Entrez.read(handle)</code></pre>

<p>But now I&#39;m getting an Error:</p>

<pre>
<code>Bio.Entrez.Parser.ValidationError: Failed to find tag &#39;GBSeq_xrefs&#39; in the DTD. To skip all tags that are not represented in the DTD, please call Bio.Entrez.read or Bio.Entrez.parse with validate=False.</code></pre>

<p>So I run this:</p>

<pre>
<code>records = Entrez.read(handle, validate=False)</code></pre>

<p>But I&#39;m still getting an Error:</p>

<pre>
<code>TypeError: &#39;str&#39; object does not support item assignment</code></pre>

<p>After some research I realized that NCBI made new changes concerning the <code>RefSeq</code> which creates new tags in the xml file (of GenPept): <a href="http://www.ncbi.nlm.nih.gov/mailman/pipermail/refseq-announce/2014q2/000117.html">http://www.ncbi.nlm.nih.gov/mailman/pipermail/refseq-announce/2014q2/000117.html</a></p>

<p>Do I need to change something in the DTD to support these new tags?</p>

<p>Thank you very much for your support.</p>

The DTD used by Bio.Entrez is out of date.

Download the DTD from <a href="http://www.ncbi.nlm.nih.gov/dtd/NCBI_GBSeq.mod.dtd">here</a>

Put it in the Bio.Entrez DTDs folder.

To find the location of the folder:

    >>> from Bio import Entrez
    >>> Entrez.__file__

The folder is `xxxxxxxxxxxxxxxxxxxx/Bio/Entrez/DTDs`