uTools-Manuals/docs/java/javax/xml/transform/package-summary.html

184 lines
18 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="header">
<h1 class="title" title="Package">Package javax.xml.transform</h1>
<div class="docSummary">
<div class="block">
该包定义了用于处理转换指令的通用API并执行从源到结果的转换。
</div>
</div>
<p>See: <a href="#package.description">描述</a></p>
</div><div class="contentContainer">
<ul class="blockList">
<li class="blockList">
<table border="0" cellpadding="3" cellspacing="0" class="typeSummary" summary="Interface Summary table, listing interfaces, and an explanation">
<caption>
<span>接口摘要</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">接口</th>
<th class="colLast" scope="col">描述</th>
</tr>
</tbody>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/xml/transform/ErrorListener.html" title="interface in javax.xml.transform">ErrorListener</a></td>
<td class="colLast">
<div class="block">
<span>要提供自定义错误处理,实现此接口并使用<code>setErrorListener</code>方法注册与该实现的实例<a href="../../../javax/xml/transform/Transformer.html" title="javax.xml.transform中的类"><code>Transformer</code></a></span>
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/xml/transform/Result.html" title="interface in javax.xml.transform">Result</a></td>
<td class="colLast">
<div class="block">
实现此接口的对象包含构建转换结果树所需的信息。
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/xml/transform/Source.html" title="interface in javax.xml.transform">Source</a></td>
<td class="colLast">
<div class="block">
实现此接口的对象包含充当源输入XML源或转换指令所需的信息。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/xml/transform/SourceLocator.html" title="interface in javax.xml.transform">SourceLocator</a></td>
<td class="colLast">
<div class="block">
此接口主要用于报告XML源或转换指令中发生错误的目的。
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/xml/transform/Templates.html" title="interface in javax.xml.transform">Templates</a></td>
<td class="colLast">
<div class="block">
实现此接口的对象是已处理的转换指令的运行时代表。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/xml/transform/URIResolver.html" title="interface in javax.xml.transform">URIResolver</a></td>
<td class="colLast">
<div class="block">
实现此接口的对象可由处理器调用将documentxslimport或xslinclude中使用的URI转换为Source对象。
</div> </td>
</tr>
</tbody>
</table> </li>
<li class="blockList">
<table border="0" cellpadding="3" cellspacing="0" class="typeSummary" summary="Class Summary table, listing classes, and an explanation">
<caption>
<span>类摘要</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col"></th>
<th class="colLast" scope="col">描述</th>
</tr>
</tbody>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/xml/transform/OutputKeys.html" title="class in javax.xml.transform">OutputKeys</a></td>
<td class="colLast">
<div class="block">
提供可用于设置Transformer的输出属性或从Transformer或Templates对象检索输出属性的字符串常量。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/xml/transform/Transformer.html" title="class in javax.xml.transform">Transformer</a></td>
<td class="colLast">
<div class="block">
这个抽象类的一个实例可以将一个源代码树转换成一个结果树。
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/xml/transform/TransformerFactory.html" title="class in javax.xml.transform">TransformerFactory</a></td>
<td class="colLast">
<div class="block">
<span>TransformerFactory实例可用于创建<a href="../../../javax/xml/transform/Transformer.html" title="javax.xml.transform中的类"><code>Transformer</code></a><a href="../../../javax/xml/transform/Templates.html" title="javax.xml.transform中的接口"><code>Templates</code></a>对象。</span>
</div> </td>
</tr>
</tbody>
</table> </li>
<li class="blockList">
<table border="0" cellpadding="3" cellspacing="0" class="typeSummary" summary="Exception Summary table, listing exceptions, and an explanation">
<caption>
<span>异常摘要</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">异常</th>
<th class="colLast" scope="col">描述</th>
</tr>
</tbody>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/xml/transform/TransformerConfigurationException.html" title="class in javax.xml.transform">TransformerConfigurationException</a></td>
<td class="colLast">
<div class="block">
表示严重的配置错误。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/xml/transform/TransformerException.html" title="class in javax.xml.transform">TransformerException</a></td>
<td class="colLast">
<div class="block">
此类指定在转换过程中发生的异常情况。
</div> </td>
</tr>
</tbody>
</table> </li>
<li class="blockList">
<table border="0" cellpadding="3" cellspacing="0" class="typeSummary" summary="Error Summary table, listing errors, and an explanation">
<caption>
<span>Error Summary</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">Error</th>
<th class="colLast" scope="col">描述</th>
</tr>
</tbody>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/xml/transform/TransformerFactoryConfigurationError.html" title="class in javax.xml.transform">TransformerFactoryConfigurationError</a></td>
<td class="colLast">
<div class="block">
当Transformer工厂存在配置问题时抛出。
</div> </td>
</tr>
</tbody>
</table> </li>
</ul>
<a name="package.description">
<!-- --> </a>
<h2 title="Package javax.xml.transform Description">Package javax.xml.transform Description</h2>
<div class="block">
<p> <span>该包定义了用于处理转换指令的通用API并执行从源到结果的转换。</span> <span>这些接口不依赖于SAX或DOM标准并尝试尽可能少地做出关于转换的源和细节的假设。</span> <span>通过定义<a href="../../../javax/xml/transform/Source.html" title="javax.xml.transform中的接口"><code>Source</code></a><a href="../../../javax/xml/transform/Result.html" title="javax.xml.transform中的接口"><code>Result</code></a>接口实现了这一点。</span> </p>
<p> <span>要定义用户的具体类API定义了在根级别找到的接口的特殊化。</span> <span>这些接口在发现<a href="../../../javax/xml/transform/sax/package-summary.html"><code>javax.xml.transform.sax</code></a> <a href="../../../javax/xml/transform/dom/package-summary.html"><code>javax.xml.transform.dom</code></a><a href="../../../javax/xml/transform/stream/package-summary.html"><code>javax.xml.transform.stream</code></a></span> </p>
<h3> <span>创建对象</span> </h3>
<p> <span>API允许从静态函数<a href="../../../javax/xml/transform/TransformerFactory.html#newInstance--"><code>TransformerFactory.newInstance()</code></a>创建一个具体的<a href="../../../javax/xml/transform/TransformerFactory.html" title="javax.xml.transform中的类"><code>TransformerFactory</code></a>对象。</span> </p>
<h3> <span>输入和输出规范</span> </h3>
<p> <span>该API定义了两个名为<a href="../../../javax/xml/transform/Source.html" title="javax.xml.transform中的接口"><code>Source</code></a><a href="../../../javax/xml/transform/Result.html" title="javax.xml.transform中的接口"><code>Result</code></a>接口对象。</span> <span>为了将Source和Result对象传递给接口必须使用具体的类。</span> <span>三个具体表现在为每个对象的定义: <a href="../../../javax/xml/transform/stream/StreamSource.html" title="javax.xml.transform.stream中的类"><code>StreamSource</code></a><a href="../../../javax/xml/transform/stream/StreamResult.html" title="javax.xml.transform.stream中的类"><code>StreamResult</code></a> <a href="../../../javax/xml/transform/sax/SAXSource.html" title="javax.xml.transform.sax中的类"><code>SAXSource</code></a><a href="../../../javax/xml/transform/sax/SAXResult.html" title="javax.xml.transform.sax中的类"><code>SAXResult</code></a> ,并<a href="../../../javax/xml/transform/dom/DOMSource.html" title="javax.xml.transform.dom中的类"><code>DOMSource</code></a><a href="../../../javax/xml/transform/dom/DOMResult.html" title="javax.xml.transform.dom中的类"><code>DOMResult</code></a></span> <span>这些对象中的每一个定义了一个FEATURE字符串我是URL的形式可以传递给<a href="../../../javax/xml/transform/TransformerFactory.html#getFeature-java.lang.String-"><code>TransformerFactory.getFeature(java.lang.String)</code></a>以查看给定类型的Source或Result对象是否受支持。</span> <span>例如要测试是否支持DOMSource和StreamResult您可以应用以下测试。</span> </p>
<pre> <span><code> TransformerFactory tfactory = TransformerFactory.newInstance(); if (tfactory.getFeature(DOMSource.FEATURE) &amp;&amp; tfactory.getFeature(StreamResult.FEATURE)) { ... } </code></span> </pre>
<h3> <span><a name="qname-delimiter">Qualified Name Representation</a></span> </h3>
<p> <span><a href="http://www.w3.org/TR/REC-xml-names">Namespaces</a>在处理XML对象时提出了一个问题区域。</span> <span>合格名称以XML标记显示为前缀名称。</span> <span>但前缀本身并不持有身份。</span> <span>相反它是上下文映射到拥有身份的URI。</span> <span>因此当Java程序中通过“xyzfoo”等合格名称时必须提供将“xyz”映射到命名空间的方法。</span> </p>
<p> <span>一个解决方案是创建一个保存命名空间URI的“QName”对象以及前缀和本地名称但这并不总是最佳的解决方案例如当您要使用唯一的字符串作为键一个字典对象。</span> <span>没有字符串表示也使得很难在XML文档的上下文之外指定命名空间的标识。</span> </p>
<p> <span>为了将命名空间值传递给转换,例如在<a href="../../../javax/xml/transform/Transformer.html" title="javax.xml.transform中的类"><code>Transformer</code></a>对象上设置属性或参数时此规范定义了一个String“qname”对象参数作为两部分字符串传递命名空间URI由大括号括起来{}),后跟本地名称。</span> <span>如果qname具有空URI则String对象仅包含本地名称。</span> <span>应用程序可以通过测试来查看名称的第一个字符是否为“{”字符从而安全地检查非空URI。</span> </p>
<p> <span>例如,如果从使用&lt;xyzfoo xmlnsxyz =“http://xyz.foo.com/yada/baz.html”/&gt;定义的元素获取URI和本地名称则合格名称将为“{http://xyz.foo.com/yada/baz.html}foo”。</span> <span>请注意,前缀丢失。</span> </p>
<h3> <span>结果树序列化</span> </h3>
<p> <span>结果树的串行化可以通过<a href="../../../javax/xml/transform/Transformer.html#setOutputProperties-java.util.Properties-"><code>Transformer.setOutputProperties(java.util.Properties)</code></a><a href="../../../javax/xml/transform/Transformer.html#setOutputProperty-java.lang.String-java.lang.String-"><code>Transformer.setOutputProperty(java.lang.String, java.lang.String)</code></a>方法进行控制。</span> <span>这些属性仅适用于流结果当结果是DOM树或SAX事件流时它们不起作用。</span> </p>
<p> <span>匹配<a href="http://www.w3.org/TR/xslt#output">XSLT specification for xsl:output attributes的</a>字符串可以从<a href="../../../javax/xml/transform/OutputKeys.html" title="javax.xml.transform中的类"><code>OutputKeys</code></a>类引用。</span> <span>也可以指定其他字符串。</span> <span>如果变压器不识别输出键,则抛出<a href="../../../java/lang/IllegalArgumentException.html" title="java.lang中的类"><code>IllegalArgumentException</code></a> ,除非键名称为<a href="#qname-delimiter">namespace qualified</a></span> <span>总是允许输入命名空间限定的输出密钥名称,尽管它们可能被某些实现忽略。</span> </p>
<p> <span>如果所需要的是将源简单的身份转换为结果,那么<a href="../../../javax/xml/transform/TransformerFactory.html" title="javax.xml.transform中的类"><code>TransformerFactory</code></a>提供了一个没有参数的<a href="../../../javax/xml/transform/TransformerFactory.html#newTransformer--"><code>TransformerFactory.newTransformer()</code></a>方法。</span> <span>此方法创建一个有效地将源复制到结果的Transformer。</span> <span>此方法可用于从SAX事件创建DOM或从DOM或SAX事件创建XML或HTML流。</span> </p>
<h3> <span>异常和错误报告</span> </h3>
<p> <span>转换API会抛出三种类型的异常异常。</span> <span><a href="../../../javax/xml/transform/TransformerFactoryConfigurationError.html" title="javax.xml.transform中的类"><code>TransformerFactoryConfigurationError</code></a>平行于<a href="../../../javax/xml/parsers/FactoryConfigurationError.html" title="javax.xml.parsers中的类"><code>FactoryConfigurationError</code></a> 并且当与所述的TransformerFactory的结构存在问题则抛出。</span> <span>当使用“javax.xml.transform.TransformerFactory”系统属性指定的转换工厂类无法找到或实例化时通常会抛出此错误。</span> </p>
<p> <span>如果由于任何原因无法创建<a href="../../../javax/xml/transform/TransformerConfigurationException.html" title="javax.xml.transform中的类">Transformer</a>则可能会抛出<code>TransformerConfigurationException</code></span> <span>如果转换指令中存在语法错误则可能会抛出TransformerConfigurationException例如调用<a href="../../../javax/xml/transform/TransformerFactory.html#newTransformer-javax.xml.transform.Source-"><code>TransformerFactory.newTransformer(javax.xml.transform.Source)</code></a>时。</span> </p>
<p> <span><a href="../../../javax/xml/transform/TransformerException.html" title="javax.xml.transform中的类"><code>TransformerException</code></a>是在转换过程中发生的一般异常。</span> <span>变压器异常可能会包装另一个异常,并且如果调用了<a href="../../../javax/xml/transform/TransformerException.html#printStackTrace--"><code>TransformerException.printStackTrace()</code></a>方法中的任何一个,它将从最近的一个开始生成堆栈转储列表。</span> <span>变压器异常还提供了一个<a href="../../../javax/xml/transform/SourceLocator.html" title="javax.xml.transform中的接口"><code>SourceLocator</code></a>对象,指示源树中的哪个或变换指令发生错误。</span> <span>可以调用<a href="../../../javax/xml/transform/TransformerException.html#getMessageAndLocation--"><code>TransformerException.getMessageAndLocation()</code></a>获取位置信息的错误消息,并且可以调用<a href="../../../javax/xml/transform/TransformerException.html#getLocationAsString--"><code>TransformerException.getLocationAsString()</code></a>来获取位置字符串。</span> </p>
<p> <span>转换警告和错误发送到<a href="../../../javax/xml/transform/ErrorListener.html" title="javax.xml.transform中的接口"><code>ErrorListener</code></a> ,此时应用程序可能会决定报告错误或警告,并可能会决定为非致命错误<code>异常</code></span> <span><code>ErrorListener</code>可以通过设置<a href="../../../javax/xml/transform/TransformerFactory.html#setErrorListener-javax.xml.transform.ErrorListener-"><code>TransformerFactory.setErrorListener(javax.xml.transform.ErrorListener)</code></a>报告说有语法错误在转换指令,或通过做错误<a href="../../../javax/xml/transform/Transformer.html#setErrorListener-javax.xml.transform.ErrorListener-"><code>Transformer.setErrorListener(javax.xml.transform.ErrorListener)</code></a>报告在转换过程中出现的错误。</span> <span>这两个对象上的<code>ErrorListener</code>始终是有效的,非<code>null</code> ,无论是由应用程序设置还是由处理器提供的默认实现。</span> <span>处理器提供的默认实现将会将所有警告和错误报告给<code>System.err</code> ,并且不会抛出任何<code>异常</code> s。</span> <span><em>强烈</em>鼓励应用程序注册和使用<code>ErrorListener</code> ,以确保警告和错误的正确行为。</span> </p>
<h3> <span>解决转换中的URI</span> </h3>
<p> <span>API提供了一种从样式表指令中引用的URI或通过调用应用程序解析的转换内的URI的方法。</span> <span>这可以通过创建一个实现类来完成<a href="../../../javax/xml/transform/URIResolver.html" title="javax.xml.transform中的接口"><code>URIResolver</code></a>接口,其方法之一, <a href="../../../javax/xml/transform/URIResolver.html#resolve-java.lang.String-java.lang.String-"><code>URIResolver.resolve(java.lang.String, java.lang.String)</code></a> 并使用这个类来设置URI分辨率的转换指令或改造与<a href="../../../javax/xml/transform/TransformerFactory.html#setURIResolver-javax.xml.transform.URIResolver-"><code>TransformerFactory.setURIResolver(javax.xml.transform.URIResolver)</code></a><a href="../../../javax/xml/transform/Transformer.html#setURIResolver-javax.xml.transform.URIResolver-"><code>Transformer.setURIResolver(javax.xml.transform.URIResolver)</code></a></span> <span><code>URIResolver.resolve</code>方法使用两个String参数即样式表指令中找到的URI或构建为转换过程的一部分以及如果需要绝对URI则第一个参数将作为绝对的基本URI。</span> <span>返回的<a href="../../../javax/xml/transform/Source.html" title="javax.xml.transform中的接口"><code>Source</code></a>对象必须由变压器使用,如其实现的功能所指定。</span> </p>
</div>
</div>