데스크톱 브라우저에서 XML을 변환하는 데 성공한 XSL 파일이 있습니다. 그 XSLT에서는 EXLT node-set() 함수를 사용하고 있습니다.
Android에서 동일한 XSL 파일을 사용하여 동일한 XML 파일을 변환하려고하면 "XPATH 표현식 오류"라는 오류가 표시되고 node-set() 함수를 호출하는 행이 표시됩니다.
Android에서 xxx : node-set()을 사용하는 방법에 대한 아이디어가 있으십니까?안드로이드 : 안드로이드에서 XSLT 변환을 위해 xxx : node-set()을 사용하는 방법
답변
Android는 LibXML2를 사용하므로방법이 있습니다. 사용 설정하면 표시된대로 사용하십시오. http://www.exslt.org/exsl/index.html
내 xsl 파일에서 'node-set'을 사용하는 동안 동일한 문제가 발생합니다. 안드로이드는 'xalan'xslt 프로세서를 사용하기 때문에 데스크톱에서는 작동하지만 안드로이드에서는 작동하지 않습니다. xalan-java jar뿐만 아니라 안드로이드 프로젝트 (xalan.jar, serializer.jar, xercesImpl.jar, xml-apis.jar)를 포함 시켰습니다. 'hasExsltSupport'가 활성화되어 있는지 테스트하는 방법? 이 메소드가 어느 클래스에 있는지 그리고 어떻게 테스트하는지. 또한 is가 활성화되어 있지 않으면 어떻게 활성화합니까? –
Android는 Xalan을 사용합니다. exslt 확장을 선언하여 빌드하도록 Android Studio를 관리하지는 못했지만 xalan 네임 스페이스 함수는 네임 스페이스 선언을 다운로드 한 후 빌드됩니다. 불행하게도, 여전히 오류가 발생합니다 : 문맥이 프로세서에서 제공하도록되어 있기 때문에
javax.xml.transform.TransformerException: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object org.apache.xalan.extensions.ExtensionsTable.extFunction(org.apache.xpath.functions.FuncExtFunction, java.util.Vector, org.apache.xalan.extensions.ExpressionContext)' on a null object reference
이 버그처럼 보인다, XSL 만 PARAM/변수를 제공합니다.
어떤 XSLT 프로세서가 사용되는지 알아야합니다. 그러면이 XSLT 프로세서는 RTF를 노드 집합으로 변환하는 데 사용할 공급 업체에서 제공 한 네임 스페이스 및 확장 함수 이름을 찾습니다. –
귀하의 회신을 감사드립니다. 나는 같은 것에 출판 된 것을 찾을 수 없었다. EXSLT와 Xalan 네임 스페이스 모두를 사용하여 이전에 같은 오류가있는 코드를 시도했습니다. 나는 XSLT에서 Android 기능을 호출하여 동일한 기능을 수행 할 수있는 방법이있을 것이라고 생각했지만 작업을 수행 할 수 없었습니다. – rajeev
내 시나리오는 다음과 같습니다 어딘가에 내 XML에서 나는 분리하고 개별 분리 된 문자열을 사용하여 XML을 HTML 문서로 변환해야하는 토큰 화 된 문자열이 있습니다. 포럼에서 필자는 XPATH를 동일하게 사용하기 전에 노드 집합으로 변환해야하는 동적 변수를 만들어야한다는 결론에 도달했습니다. 제가 빠진 것이 있거나 그 주위에 또 다른 방법이 있다면 알려주세요. 이 순간 나는 어떤 것을 시도해 볼 의향이 있습니다. – rajeev