Java 解析一个简单的xml字符串

Java 解析一个简单的xml字符串,java,xml-parsing,Java,Xml Parsing,我有一个简单的xml,希望检索“字符串”中的值,该值为True或False。有很多建议的方法看起来非常复杂!最好的方法是什么 <?xml version="1.0" encoding="utf-8"?> <string xmlns="http://tempuri.org/">"True"</string> 现在如何从读取器中获取值?首先需要定义一个处理程序: public class MyElementHandler extends DefaultHandl

我有一个简单的xml,希望检索“字符串”中的值,该值为True或False。有很多建议的方法看起来非常复杂!最好的方法是什么

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">"True"</string>

现在如何从读取器中获取值?

首先需要定义一个处理程序:

public class MyElementHandler extends DefaultHandler {
        private boolean isElementFound = false;
        private String value;

    public String getValue() {
        return value;
    }

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) {
            if (qName.equals("elem")) {
                isElementFound = true;
            }
        }

        @Override
        public void endElement(String uri, String localName, String qName) {
            if (qName.equals("elem")) {
                isElementFound = false;
            }
        }

        @Override
        public void characters(char ch[], int start, int length) {
            if (isElementFound) {
                value = new String(ch).substring(start, start + length);
            }
        }
    }
然后,您可以按如下方式解析xml:

String xml = response.toString();
XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
InputSource source = new InputSource(new StringReader(xml));
//-- create handlers
MyAttributeHandler handler = new MyAttributeHandler();
xmlReader.setContentHandler(handler);
xmlReader.parse(source);
System.out.println("value = " + handler.getValue());

关于sax解析更一般。

这里不需要XML。一艘两艘班轮:

String xmlContent = response.toString();
String value = xmlContent.replaceFirst("(?sm)^.*<string[^>]*>([^<]*)<.*$", "$1");

if (value == xmlContent) { // No replace
    throw new IllegalStateException("Not found");
}
boolean result = Boolean.valueOf(value.trim().toLowerCase());

这不是XML,它是一个包含类似
.xml是tempuri.org/“>”True“如果你真的有xml(你插入的不是xml;),你可以尝试使用xpath,例如,,,你对API,比如sax,stax或dom的选择有多具体?我对“+1:解析xml元素的很棒的正则表达式”和“-1:它特别要求解析xml,简单格式只是一个示例“。仍在思考…好的,+1,因为您给出了一个XML示例(感谢正则表达式!)有点困惑,但最终还是实现了,谢谢。返回的值总是以相同的格式,只有内容更改为true或false,所以您的替换建议就足够了。@Matthieu和我的看法一样:详细说明基本XML解析的可怕之处,用DOM构建替换它,然后得到子对象。或者砍掉t也许需要一个更好的API:
XML.read(inputSource).xpath(“/string/text()”).toString()
String xmlContent = response.toString();
String value = xmlContent.replaceFirst("(?sm)^.*<string[^>]*>([^<]*)<.*$", "$1");

if (value == xmlContent) { // No replace
    throw new IllegalStateException("Not found");
}
boolean result = Boolean.valueOf(value.trim().toLowerCase());
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(inputSource);
String xml = doc.getDocumentElement().getTextContent();