나는 saxon을 처음 사용하는 사람을 지적하고, 패키지의 문서와 예제를 따라 해 보았습니다.하지만이 문제에 대해서는 운이 좋지 않습니다. 문제.Saxon 8 (Java 버전) 문제
기본적으로 saxon v8을 사용하여 Java에서 일부 xml 처리를 시도하고 있습니다. 작업을 수행하기 위해 패키지에 포함 된 샘플 파일 중 하나를 가져 와서 필요에 맞게 수정했습니다. 그것은 네임 스페이스를 사용하지 않는 한 오래 작동합니다. 그리고 그것은 제 질문입니다. 네임 스페이스 문제를 해결하려면 어떻게해야합니까? 나는 그것을 사용하는 것을 정말로 신경 쓰지 않지만 내 XML에 존재하므로, 그것을 사용하거나 무시해야한다. 두 가지 해결책 모두 좋습니다.
어쨌든 여기에 내 시동 코드가 있습니다. 아무것도하지 않고 xpath 쿼리를 사용하여 하드 코딩 된 xml 문서에 대해 사용하려고 시도합니다. 내가 네임 스페이스를 포함하는 쿼리로 이것을 실행하는 경우의 예 XML 파일이 여기
public static void main(String[] args) {
String query = args[0];
File XMLStream=null;
String xmlFileName="doc.xml";
OutputStream destStream=System.out;
XQueryExpression exp=null;
Configuration C=new Configuration();
C.setSchemaValidation(false);
C.setValidation(false);
StaticQueryContext SQC=new StaticQueryContext(C);
DynamicQueryContext DQC=new DynamicQueryContext(C);
QueryProcessor processor = new QueryProcessor(SQC);
Properties props=new Properties();
try{
exp=processor.compileQuery(query);
XMLStream=new File(xmlFileName);
InputSource XMLSource=new InputSource(XMLStream.toURI().toString());
SAXSource SAXs=new SAXSource(XMLSource);
DocumentInfo DI=SQC.buildDocument(SAXs);
DQC.setContextNode(DI);
SequenceIterator iter = exp.iterator(DQC);
while(true){
Item i = iter.next();
if(i != null){
System.out.println(i.getStringValue());
}
else break;
}
}
catch (Exception e){
System.err.println(e.getMessage());
}
}
...
<?xml version="1.0"?>
<ns1:animal xmlns:ns1="http://my.catservice.org/">
<cat>
<catId>8889</catId>
<fedStatus>true</fedStatus>
</cat>
</ns1:animal>
, 오류가 발생합니다. 예 : /ns1:animal/cat/
은 "접두사 ns1이 선언되지 않았습니다"라는 오류를 제공합니다.
쿼리에서 ns1 :을 제거하면 아무 것도 표시되지 않습니다. 나는 의사에게 "ns1 :"을 "동물"앞에 붙여서 제거하면 나는 쿼리 /animal/cat/
을 성공으로 실행할 수 있습니다.
도움을 주시면 감사하겠습니다. 감사.