Java 如何使用org.jdom2获取文档的xml版本?
我使用org.jdom2解析xml文件。我需要知道该文件是否标记为1.1版或1.0版。如何访问xml声明?Java 如何使用org.jdom2获取文档的xml版本?,java,xml,jdom-2,Java,Xml,Jdom 2,我使用org.jdom2解析xml文件。我需要知道该文件是否标记为1.1版或1.0版。如何访问xml声明? 另外,在使用XMLOutputter编写输出时如何设置版本?XML解析器(SAX)解析并使用XML版本。一些解析器支持SAX2API,这允许一些解析器提供扩展的解析信息。如果解析器执行此操作,则XML版本可能可用。JDOM没有这个信息的钩子,所以数据在JDOM中还不可用。这将是一个很好的功能要求 JDOM还以XML1.0版本输出数据。从JDOM的角度来看,1.0和1.1之间的差异很小。最显
另外,在使用XMLOutputter编写输出时如何设置版本?XML解析器(SAX)解析并使用XML版本。一些解析器支持SAX2API,这允许一些解析器提供扩展的解析信息。如果解析器执行此操作,则XML版本可能可用。JDOM没有这个信息的钩子,所以数据在JDOM中还不可用。这将是一个很好的功能要求 JDOM还以XML1.0版本输出数据。从JDOM的角度来看,1.0和1.1之间的差异很小。最显著的差异是不同支持字符之间的处理略有不同 如果要为输出指定不同的XML版本,可以通过禁用XMLOutputter的声明来强制声明(然后在输出XML之前自己将声明转储到流中) 或者,您可以扩展并重写该方法以输出所需的声明
这些选项都不容易,JDOM中对XML 1.1的支持也很有限。您的里程可能会有所不同,但请随时向我通报您的成功情况,如果您有任何建议/问题,请向我提交有关Github问题的问题:我完全相信rolfl的答案是正确的。这不是我最终采取的方法。我决定只做一个快速PAR这可能需要使用带有BOM的文档进行进一步测试
private static Pattern xmlDeclaration = Pattern.compile("<?xml.* version=\"([\\d|\\.]+)\".*?>");
private static boolean isXml10(InputStream inputStream) throws IOException
{
boolean result = true;
InputStreamReader is = null;
BufferedReader br = null;
try
{
is = new InputStreamReader(inputStream);
br = new BufferedReader(is);
String line = br.readLine();
Matcher declarationMatch = xmlDeclaration.matcher(line);
if (declarationMatch.find())
{
String version = declarationMatch.group(1);
result = version.equals("1.0");
}
}
finally
{
is.close();
br.close();
}
return result;
}
private静态模式xmldesclaration=Pattern.compile(“”);
私有静态布尔值isXml10(InputStream InputStream)引发IOException
{
布尔结果=真;
InputStreamReader为空;
BufferedReader br=null;
尝试
{
is=新的InputStreamReader(inputStream);
br=新的BufferedReader(is);
String line=br.readLine();
Matcher declarationMatch=xmlDeclaration.Matcher(行);
if(declarationMatch.find())
{
字符串版本=declarationMatch.group(1);
结果=版本。等于(“1.0”);
}
}
最后
{
is.close();
br.close();
}
返回结果;
}