Java getElementsByTagName-失败不一致

Java getElementsByTagName-失败不一致,java,xml,xml-parsing,getelementsbytagname,Java,Xml,Xml Parsing,Getelementsbytagname,我正在使用Java应用程序读取XML文件并对其进行处理。该应用程序在大多数情况下有效,但在某些情况下无效。我有一个包含项目列表的XML文档。该应用程序读取文档并编译所述项目的列表,如下所示: NodeList responseItemNodeList=doc.getElementsByTagnames:myElement 有时编制列表,有时不编制。我看了不同的XML文档,有可用的,也有不可用的,对我来说,除了数据之外,它们似乎是相同的 有人能解释一下为什么这会偶尔失败吗 编辑:我尝试了Xpath

我正在使用Java应用程序读取XML文件并对其进行处理。该应用程序在大多数情况下有效,但在某些情况下无效。我有一个包含项目列表的XML文档。该应用程序读取文档并编译所述项目的列表,如下所示:

NodeList responseItemNodeList=doc.getElementsByTagnames:myElement

有时编制列表,有时不编制。我看了不同的XML文档,有可用的,也有不可用的,对我来说,除了数据之外,它们似乎是相同的

有人能解释一下为什么这会偶尔失败吗


编辑:我尝试了Xpath,但问题仍然存在。

您需要使用获取名称空间参数和本地名称的getElementsByTagName,而不是使用前缀限定名称。由于您当前的代码有时可以工作,这可能是因为您没有在DocumentBuilderFactory上设置setNamespaceAwaretrue。

我知道命名空间肯定会为“ns”,在工作和失败的情况下是ns。知道了这一点,getElementsByTagName就足够了吗?@heyya99-对于符合名称空间的XML文档,您应该使用包含名称空间的XML API。否则你会得到不可预测的脆弱结果。你的建议似乎是最佳实践,如果名称空间发生了变化,但您认为这能解决我的问题吗?@heyya99-需要注意的是,名称空间前缀ns:foo的ns部分与对应于` of xmlns:ns'的名称空间之间存在差异=http://www.example.com/blah. 希望名称空间在您的用例中不会改变,但是前缀可能会改变。使用名称空间方法肯定可以解决您的问题。两者都具有以下命名空间:。如果我知道在这种情况下名称空间是相同的,我看不出你的建议有什么不同。我的应用程序的部署是不平凡的,需要时间,所以我需要确保会有所不同。