Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用org.jdom2获取文档的xml版本?_Java_Xml_Jdom 2 - Fatal编程技术网

Java 如何使用org.jdom2获取文档的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之间的差异很小。最显

我使用org.jdom2解析xml文件。我需要知道该文件是否标记为1.1版或1.0版。如何访问xml声明?
另外,在使用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();
}
返回结果;
}