我正在使用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"?>
我该怎么做?
答案 0 :(得分:0)
我不知道如何在VTD-XML中执行此操作。但是下面的答案解释了如何在DOM中完成它。 (对于其他读者:如果DOM不是选项,请忽略此答案)
请注意,version
节点的xml
属性是指应用的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
内的私有字段中,并且在未指定版本时内部为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")
}
答案 1 :(得分:0)
如果您只需要令牌&#34; 1.0&#34;,请获取对应于&#34;版本&#34;的TOKEN_DEC_ATTR_NAME令牌索引。下一个(索引+ 1)是一个。只需使用正确的令牌类型迭代令牌,并使用Vtdnav类的内置方法测试索引值。