gpt4 book ai didi

java - Java中使用VTD-XML获取XML版本节点

转载 作者:太空宇宙 更新时间:2023-11-04 13:46:19 27 4
gpt4 key购买 nike

我正在使用 VTD-XML 库解析 XML 文档,并且需要从文档中获取版本标记。

我的文档如下所示;

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<rootNode>
<items>
<item>
<name>XXX</name>
<lastName>YYY</lastName>
<number>1234</number>
</item>
<item>
<name>AAA</name>
<lastName>BBB</lastName>
<number>5678</number>
</item>
<item>
<name>CCC</name>
<lastName>DDD</lastName>
<number>9012</number>
</item>
</items>
</rootNode>

我需要得到这条线。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

我该怎么做?

最佳答案

我不知道如何在 VTD-XML 中执行此操作。但下面的答案解释了如何在 DOM 中做到这一点。 (对于其他读者:如果 DOM 不是一个选项,那么请忽略此答案)

请注意,xml 节点的 version 属性指的是所应用的 XML 标准的版本。为了避免混淆,它不充当文档内容的修订号。

话虽如此,您可以使用 Document#getXmlVersion方法同样,还有getXmlEncoding()getXmlStandalone()

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document document = documentBuilder.parse(new File("myFile.xml"));

String version = document.getXmlVersion();
String encoding = document.getXmlEncoding();
boolean standalone = document.getXmlStandalone();

你可以像这样打印它们:

System.out.println("<?xml version=\"" + version + "\" encoding=\"" + encoding + "\" standalone=\"" + (standalone? "yes" : "no") + "\" ?>");

编辑:

回答问题:“如何检测是否指定了版本”。

version 属性存储在 DocumentImpl 内的私有(private)字段中,当未指定版本时,在内部它为 null。在 org.apache.xerces.dom 实现中,getter 提供默认值:

public String getXmlVersion() {
return (version == null)?"1.0":version;
}

不幸的是,没有 getter 来获取 version 字段的可为空形式。但是您可以使用反射来访问它:

Field versionField = document.getClass().getDeclaredField("version");
versionField.setAccessible(true);
String version = versionField.get(document);
if (version == null)
{
System.out.println("version was not specified")
}

关于java - Java中使用VTD-XML获取XML版本节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30800879/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com