<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>绿色记忆 &#187; DTD</title>
	<atom:link href="https://blog.gmem.cc/tag/dtd/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.gmem.cc</link>
	<description></description>
	<lastBuildDate>Mon, 13 Apr 2026 08:03:10 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.14</generator>
	<item>
		<title>Dom4j知识集锦</title>
		<link>https://blog.gmem.cc/dom4j-faq</link>
		<comments>https://blog.gmem.cc/dom4j-faq#comments</comments>
		<pubDate>Thu, 17 Feb 2011 06:54:41 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Dom4j]]></category>
		<category><![CDATA[DTD]]></category>
		<category><![CDATA[FAQ]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XPath]]></category>
		<category><![CDATA[XSD]]></category>

		<guid isPermaLink="false">http://blog.gmem.cc/?p=1542</guid>
		<description><![CDATA[<p>如何禁止加载XSD和DTD [crayon-69ded959c80e4657268501/] DTD验证，无法联网时报错 通过指定本地的DTD文档来解决： [crayon-69ded959c80ea830672808/] 使用JAXP来进行XSD验证 [crayon-69ded959c80ec537823628/] Dom4j如何格式化XML输出 [crayon-69ded959c80ee275864771/] 如何使用XPath解析带名字空间的XML [crayon-69ded959c80f1972098679/] Dom4j访问者模式中，删除节点导致NullPointerException 报错：java.lang.NullPointerException at org.dom4j.tree.AbstractElement.accept(AbstractElement.java:208) 解决：在访问者中记录需要删除的节点，访问结束后一起删除。</p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/dom4j-faq">Dom4j知识集锦</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><div class="blog_h3"><span class="graybg">如何禁止加载XSD和DTD</span></div>
<pre class="crayon-plain-tag">SAXReader reader = new SAXReader( true );
reader.setFeature( Constants.XERCES_FEATURE_PREFIX + Constants.LOAD_EXTERNAL_DTD_FEATURE, false );</pre>
<div class="blog_h3"><span class="graybg">DTD验证，无法联网时报错</span></div>
通过指定本地的DTD文档来解决：<br />
<pre class="crayon-plain-tag">SAXReader reader = new SAXReader( true );
reader.setEntityResolver( new EntityResolver() {

    public InputSource resolveEntity( String publicId, String systemId )
    {
        if ( publicId.equals( "-//Hibernate/Hibernate Mapping DTD 3.0//EN" ) )
        {
            InputStream in = getClass().getResourceAsStream( "/hibernate-mapping-3.0.dtd" );
            return new InputSource( in );
        }
        return null;
    }
} );</pre>
<div class="blog_h3"><span class="graybg">使用JAXP来进行XSD验证</span></div>
<pre class="crayon-plain-tag">InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( XSD_FILE_PATH );
javax.xml.validation.SchemaFactory factory = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI );
new StreamSource( is ) ).newValidator();
validator.validate( new StreamSource( new StringReader( xml ) ) );</pre>
<div class="blog_h3"><span class="graybg">Dom4j如何格式化XML输出</span></div>
<pre class="crayon-plain-tag">StringWriter sw = new StringWriter();
XMLWriter writer = new XMLWriter( sw, OutputFormat.createPrettyPrint() );
try
{
    writer.write( doc );
}
catch ( IOException e )
{
    // impossible
}</pre>
<div class="blog_h3"><span class="graybg">如何使用XPath解析带名字空间的XML</span></div>
<pre class="crayon-plain-tag">SAXReader reader = new SAXReader();
Map&lt;String, String&gt; nameSpaceMap = new HashMap&lt;String, String&gt;();
nameSpaceMap.put( "beans", "http://www.springframework.org/schema/beans" );
reader.getDocumentFactory().setXPathNamespaceURIs( nameSpaceMap );
Document doc = reader.read( new ClassPathResource( APP_CTX_FILE_NAME ).getInputStream() );
Element e = (Element) doc.getRootElement().selectSingleNode("beans:bean[@id='canaryConfig']/beans:property[@name='baseDir']" );
bd = e.attributeValue( "value" );</pre>
<div class="blog_h3"><span class="graybg">Dom4j访问者模式中，删除节点导致NullPointerException</span></div>
<p>报错：java.lang.NullPointerException at org.dom4j.tree.AbstractElement.accept(AbstractElement.java:208)<br />
解决：在访问者中记录需要删除的节点，访问结束后一起删除。</p>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/dom4j-faq">Dom4j知识集锦</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/dom4j-faq/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
