由于我无法控制的原因,我必须解析没有xmlns标记的xml。我认为这是一个不好的做法,因为它错过了命名空间控制。无论如何,我必须为这种情况编程。什么是面对它的最佳方式?我尝试setNamespaceAware = false并且它适用于没有xmlns标记的文件,但是当使用xmlns标记读取xml时它似乎无法正常工作。另外,我想通过将任何感知配置设置为false都不是一个好习惯。我读了一些文章告诉我们以编程方式将xmlns添加到文件中,但我怀疑它是否是一个不错的选择。任何评论将不胜感激。
javax.xml.parsers.DocumentBuilderFactory fac = new org.apache.xerces.jaxp.DocumentBuilderFactoryImpl();
fac.setNamespaceAware(true);
org.w3c.dom.Document d = null;
javax.xml.parsers.DocumentBuilder builder = fac.newDocumentBuilder();
d = builder.parse("C:/my_folder/my_file.xml");
<?xml version="1.0" encoding="UTF-8"?>
<c:de format="N" lengthField="0" maxLength="012" minLength="012" name="AMOUNT, TRANSACTION" number="004" subFields="00"/>
答案 0 :(得分:0)
如果可以为文件创建模式,则创建该模式(不带targetNamespace属性,即目标名称空间为&#34;&#34;),生成类(例如使用xjc / JAXB)和解析。
答案 1 :(得分:0)
以下是我用来解析XML文件的语句
DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
dfactory.setNamespaceAware(false);
dfactory.setValidating(false);
DocumentBuilder bldr = dfactory.newDocumentBuilder();
bldr.setErrorHandler(new ErrorHandler() {
public void warning(SAXParseException exception) throws SAXException {
// ignore warnings
}
public void error(SAXParseException exception) throws SAXException {
// ignore parse validation errors
}
public void fatalError(SAXParseException exception) throws SAXException {
throw exception;
}
});
Document doc = bldr.parse(new InputSource(is));
我认为如果关闭命名空间,则需要关闭验证。
以这种方式使用XML确实没有错。命名空间有助于模式的特定类型的演变,但不是所有类型,如果您对它进行足够的分析,命名空间只会延迟问题,但实际上并不能解决问题。它取决于特定的XML,有些以需要名称空间的方式进行管理。但如果不以这种方式管理XML,那就没有罪恶感。