Saxon抛出java.net.SocketException:

Saxon抛出java.net.SocketException:,java,html,exception,xslt,saxon,Java,Html,Exception,Xslt,Saxon,Ubuntu 10.4 JRE 1.6.0_26 萨克森9.3.0.5 我有一个非常简单的脚本,可以从有效的html文件中提取文本内容 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:html="http://www.w3.org/1999/html" version="2.0">

Ubuntu 10.4 JRE 1.6.0_26 萨克森9.3.0.5

我有一个非常简单的脚本,可以从有效的html文件中提取文本内容

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:html="http://www.w3.org/1999/html"
      version="2.0">
    <xsl:output method="text" encoding="utf-8"/>
</xsl:stylesheet>

请不要在你能想到的每个论坛上问同样的问题。选择最合适的,在那里询问,只有在没有回应时才转向别处。在多个地方问问题是在浪费那些自愿帮助你的人的时间,因为他们看不到这个问题已经在其他地方得到了回答。出于这个原因,对问题投了否决票。

对于那些寻求答案的人:

这个问题的答案是解析器试图从这里获取HTMLDTDhttp://www.w3.org/1999/html 如样式表中所述

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:html="http://www.w3.org/1999/html"
      version="2.0">
    <xsl:output method="text" encoding="utf-8"/>
</xsl:stylesheet>
W3忽略了请求,java抛出了一个异常。解析器没有表示它正在请求dtd,也没有表示它没有收到dtd。让用户对转换失败的原因一无所知。解析器的行为非常糟糕

解决方案是告诉解析器使用本地dtd,通过这样的目录,这来自ant脚本:

<macrodef name="saxon_use_catalog">
    <attribute name="input"/>
    <attribute name="stylesheet"/>
    <attribute name="output"/>
    <sequential>
        <echo>Transforming @{input} to @{output} using @{stylesheet} </echo>
        <java classname="net.sf.saxon.Transform" fork="true" failonerror="true">
            <jvmarg value="-Dxml.catalog.files=lib/xhtml11/dtd/xhtmlcatalog.xml" />
            <classpath>
                <pathelement location="lib/saxonHE-9.3.0.5.jar"/>
                <pathelement location="lib/resolver.jar"/>
                <pathelement location="lib/xhtml11/dtd/xhtmlcatalog.xml"/>
            </classpath>
            <arg value="-r:org.apache.xml.resolver.tools.CatalogResolver"/>
            <arg value="-x:org.apache.xml.resolver.tools.ResolvingXMLReader"/>
            <arg value="-y:org.apache.xml.resolver.tools.ResolvingXMLReader"/>
            <arg value="-s:@{input}"/>
            <arg value="-xsl:@{stylesheet}"/>
            <arg value="-o:@{output}"/>
        </java>
    </sequential>
</macrodef>
我使用的分解器罐和目录是用氧气包装的


斯科特

迈克尔,你说得很容易。但是,当你的工作遇到日程安排时,你会尽可能快地得到答案。这意味着在2到3个网站上发帖,希望其中一个能给出正确的答案,你就这么做。好吧,如果你想冒着疏远那些愿意花时间回答问题的人的风险,那就看你了。但我发现令人惊讶的是,人们竟然没有意识到在电子互动中需要表现出与现实生活中自动出现的相同的礼貌。
<macrodef name="saxon_use_catalog">
    <attribute name="input"/>
    <attribute name="stylesheet"/>
    <attribute name="output"/>
    <sequential>
        <echo>Transforming @{input} to @{output} using @{stylesheet} </echo>
        <java classname="net.sf.saxon.Transform" fork="true" failonerror="true">
            <jvmarg value="-Dxml.catalog.files=lib/xhtml11/dtd/xhtmlcatalog.xml" />
            <classpath>
                <pathelement location="lib/saxonHE-9.3.0.5.jar"/>
                <pathelement location="lib/resolver.jar"/>
                <pathelement location="lib/xhtml11/dtd/xhtmlcatalog.xml"/>
            </classpath>
            <arg value="-r:org.apache.xml.resolver.tools.CatalogResolver"/>
            <arg value="-x:org.apache.xml.resolver.tools.ResolvingXMLReader"/>
            <arg value="-y:org.apache.xml.resolver.tools.ResolvingXMLReader"/>
            <arg value="-s:@{input}"/>
            <arg value="-xsl:@{stylesheet}"/>
            <arg value="-o:@{output}"/>
        </java>
    </sequential>
</macrodef>