Java 和解析 XML

标签 java xml

我编写的应用程序将解析 XML 文件。我使用 SAX 解析器,这是我的 SAX 处理程序代码:

public class XMLHandler extends DefaultHandler {

private static final String MEASURES = "measures";

private static final String SUGARMEASUREDATE = "sugarMeasureDate";
private static final String SUGARMEASUREVALUE = "sugarMeasureValue";

private static final String UPGYROSCOPEDATE = "upGyroscopeDate";
private static final String UPGYROSCOPEVALUE = "upGyroscopeValue";

private static final String DOWNGYROSCOPEDATE = "downGyroscopeDate";
private static final String DOWNGYROSCOPEVALUE = "downGyroscopeValue";

Boolean currentElement = false;
String currentValue = null;

public static MeasureLists measureLists = null;

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    currentElement = true;

    if (localName.equals("measures")) {
        measureLists = new MeasureLists();
    }
}

public void endElement(String uri, String localName, String qName) throws SAXException {

    currentElement = false;
    if (localName.equals(SUGARMEASUREDATE)) {
        measureLists.setSugarDate(currentValue);
    }
    else if (localName.equals(SUGARMEASUREVALUE)) {
        measureLists.setSugarValue(currentValue);
    }
    else if (localName.equals(UPGYROSCOPEDATE)) {
        measureLists.setUpGyroscopeDate(currentValue);
    }
    else if (localName.equals(UPGYROSCOPEVALUE)) {
        measureLists.setUpGyroscopeValue(currentValue);
    }
    else if (localName.equals(DOWNGYROSCOPEDATE)) {
        measureLists.setDownGyroscopeDate(currentValue);
    }
    else if (localName.equals(DOWNGYROSCOPEVALUE)) {
        measureLists.setDownGyroscopeValue(currentValue);
    }
}

public void characters(char[] ch, int start, int length) throws SAXException {

    if (currentElement) {
        currentValue = new String(ch, start, length);
        currentElement = false;
    }
}

public MeasureLists getMeasureLists() {
    return measureLists;
}
}

我的问题是此代码正确检测事件(开始和结束标记),但变量 localName 为空String。我在文档中读到,如果“未执行命名空间处理”,则 localName 为空。我的问题是这是什么意思以及我该如何处理它。感谢您的帮助和提示。

编辑

我注意到,当我将“localName”变量更改为“qName”时,一切都会正常,我没有任何问题。你知道这是什么吗?

最佳答案

XML 命名空间包含两部分结构,一部分称为 URI,第二部分称为 localName。例如。将是

html:va xmlns:html="www.google.com"

此处,URIwww.google.comlocalNameva。这些在 XML 的开始标签中指定。在您的情况下,您的 XML 命名空间中似乎有问题。这可能就是您遇到此问题的原因。

更多信息可以在这里找到:

http://www.saxproject.org/namespaces.html

关于Java 和解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7743357/

相关文章:

java - 具有完整 POJO 数据绑定(bind)的 Jackson 自定义过滤器

java - 在 JComboBox 项中显示按钮

java - Maven 版本问题

javascript - 如何在Chrome下用javascript获取整个xml节点?

java - ExecutorService 没有关闭

java - Spring : XML Configuration Location

c# - 在 XPath 中对结果进行分组

json - node.js 将 xml 转换为 json 对象并转换回 xml

android - Android字符串资源中的XML?

java - 使用 JSF 和 AJAX 存储用户/密码