Java从11升级到17对DOM解析XML设置默认命名空间的影响及问题咨询
Java从11升级到17对DOM解析XML设置默认命名空间的影响及问题咨询
大家好,我最近碰到一个DOM解析XML的奇怪问题,折腾半天没搞明白,想请教下各位大佬:
先看我要处理的原始XML内容:
<TestFile> <TestHeader> <FileVersion>2.00</FileVersion> <FileCountry>GB</FileCountry> <FileRegion>LND</FileRegion> </TestHeader> </TestFile>
之前在早期Java 8版本里,我是用DOM API给根节点设置默认命名空间的,代码如下:
MyDoc.getDocumentElement().setAttribute("xmlns", this.NameSpaceAsString);
那时候生成的XML是正常的,只有根节点带上了指定的命名空间,子节点不会乱加额外属性:
<TestFile xmlns="mynamespace.com"> <TestHeader> <FileVersion>2.00</FileVersion> <FileCountry>GB</FileCountry> <FileRegion>LND</FileRegion> </TestHeader>
但升级到Java 11之后,问题出现了——现在生成的XML里,顶层的两个节点都带上了默认命名空间,而且TestHeader的命名空间是空的:
<TestFile xmlns="mynamespace.com"> <TestHeader xmlns=" "> <FileVersion>2.00</FileVersion> <FileCountry>GB</FileCountry> <FileRegion>LND</FileRegion> </TestHeader>
我实在搞不懂是什么变化导致的,明明只给根节点设置属性,怎么会影响到子节点?而且还多出个空的命名空间,有没有大佬知道这是Java版本升级中DOM API的什么改动引发的呀?
备注:内容来源于stack exchange,提问作者TheUltimateHack
相关产品推荐
相关产品推荐

