Android 1.5 용 응용 프로그램에서 작업 중입니다. 현재 XML 파일을 구문 분석해야합니다. 안드로이드는 API 레벨 3에서 기본적으로 XPath를 지원하지 않기 때문에 dom4j 및 jaxen 라이브러리를 사용하여 파일을 읽기로 결정했습니다.Android 1.5 및 dom4j - 특성 이름의 구문이 잘못 분석되었습니다.
<?xml version="1.0" encoding="utf-8" ?>
<tests>
<resources base_lang="en">
<string base="example">
<localization lang="pl">Przykład</localization>
</string>
</resources>
<test name="main name">
<title>Main Title</title>
<description>Long description</description>
</test>
</tests>
그리고 간단한 코드 :
SAXReader reader = new SAXReader();
Document doc = reader.read("file:///sdcard/tests/test1.xml");
Node node = doc.selectSingleNode("/tests/test");
Element elem = (Element)node;
for(int j=0;j<elem.attributeCount();++j) {
Attribute attr = elem.attribute(j);
Logger.getLogger(AutoTesterMain.class.getName()).log(Level.SEVERE, "ATTR: "+attr.getName()+"="+attr.getValue());
}
그것은, test1.xml 파일을 읽고 "/ 테스트/테스트"노드를 열거를 발견
나는 간단한 XML 파일 (test1.xml)가 그것은 속성입니다. 나는 (나는 자바 용어에 깊은 아니에요) "바탕 화면"자바 응용 프로그램의 일환으로이 코드를 실행하면, 내가 (페도라 리눅스에서 오픈 JDK 1.8.3)을 기대하는 표시
SEVERE: ATTR: name=main name
을 불행하게도,에 당신이 볼 수 있듯이 속성의 값이 OK입니다,
E/AutoTesterMain( 823): ATTR: base_lang=main name
하지만, 문제는 이름이있다 : 1.5 (에뮬레이터 년 OFC) 안드로이드, 동일한 코드를 보여줍니다. 나는이 장소에서 왜 완전히 다른 DOM 요소 ("/ tests/resources")의 속성 이름이 나타나는 지 전혀 모릅니다. 내 파일을 잘못 파싱 한 것 같습니다. 그래서 아마도 뭔가 잘못 설정 한 것 같습니다 ...
물론 두 버전 모두 dom4j 및 jaxen 라이브러리와 완전히 똑같은 .jars를 사용하므로 아마 괜찮을 것입니다.
이 문제는 잘못된 속성 목록보다 많은 영향을 미칩니다. 또한 "/ tests/test/@ base_lang"은 "main name"문자열을 제공하지만 "/ tests/test/@ name"을 선택하면 아무것도 표시되지 않는 XPath를 사용하여 특성을 올바르게 읽을 수 없습니다. 이는 분명 위의 목록 속성과 동일한 오류로 인해 발생합니다.
누구에게이 문제가 발생 했습니까? 내가 어떻게 고칠 수 있니?
네이티브 XPath 지원으로 최신 Android로 이동하는 것은 불행히도 나를위한 옵션이 아닙니다.
나는 웹과 여기에서 아무 것도 찾으려고했지만 운이 없었습니다.