2016-07-19 22 views
1

私は単純なxmlを持ち、TrueまたはFalseの 'String'に保持されている値を取得したいと考えています。非常に複雑に見える多くの提案された方法があります!これを行う最善の方法は何でしょうか?単純なxml文字列を解析する

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

xmlを以下のようにxmlReaderに読み込むことができます。

XMLReader xmlReader = SAXParserFactory.newInstance() 
         .newSAXParser().getXMLReader();   
InputSource source = new InputSource(new StringReader(response.toString())); 
xmlReader.parse(source); 

私は今どのように読者から価値を引き出すことができますか?

+1

。 –

+0

xmlは<?xml version = "1.0" encoding = "utf-8"?> <文字列xmlns = "http://tempuri.org/"> "True" – joebohen

+0

本当にXML insertはXMLではありません;))たとえばxpathを試すことができます,,, – Hrabosch

答えて

1

ここではXMLは必要ありません。 2-ライナー:

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、 ` ... `のようなものを含むテキストがあるではありません

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
Document doc = builder.parse(inputSource); 
String xml = doc.getDocumentElement().getTextContent(); 
+0

私は「+1:XML要素を解析する素晴らしい正規表現」と「-1:具体的にXML構文解析を要求します。単純な形式は単なる例です」まだ考えている... あなたはXMLの例を与えるので、+1(正規表現のためにありがとう!) – Matthieu

+0

ビットは混乱しますが、最後に感謝しました。返される値は、コンテンツが変更された場合にのみtrueまたはfalseに変更されますので、置換の提案で十分です。 – joebohen

+1

@Matthieu私の側で同じ感情:基本的なXML解析で恐ろしいものを精緻化し、それをDOM構築に置き換えてから子どもが手に入れます。または、そのスパイキーなXML - 正規表現の棘をハックしますか? Xml.read(inputSource).xpath( "/ string/text()")。toString() ' –

2

あなたは最初のハンドラを定義する必要があります。

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解析に関するquestionより一般的。