나는 이상한 문제가있어서 해결책을 찾지 못하는 것 같습니다. XML 파일에 XSLT 스타일 시트를 적용하려고합니다 (이 경우 XML로 형식이 지정된 SPARQL 쿼리 결과이지만 다른 XML 파일도 동일한 결과를 제공합니다). 이 경우 DOMSource를 통해 이미로드 된 XML 문서를 다시 사용하여 변환기를 만들어야합니다.DOMSource를 통해 JAXP Transformer가 스타일 시트를 반환합니다.
대신 변환 된 XML의TransformerFactory factory = TransformerFactory.newInstance();
Document stylesheet = db.parse(new File("C:/workspace_5/stylesheet.xml"));
Transformer xformer = factory.newTransformer(new DOMSource(stylesheet));
Source source = new StreamSource(new FileInputStream("C:/workspace_5/xml-file.xml"));
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
Result result = new StreamResult(bOut);
xformer.transform(source, result);
의 StreamResult의 OutputStream에로드 된 스타일 시트를 반환합니다 (일반적으로, 스타일 시트 문서는 다른 곳에서 오는 간체) 아래의 코드를 찾을 수 있습니다. 두 번째 줄과 세 번째 줄을 다음과 같이 바꿉니다 :
Transformer xformer = factory.newTransformer(new StreamSource(
new FileInputStream(""C:/workspace_5/stylesheet.xml")));
그러면 모든 것이 잘 작동합니다. 그리고 네, 물론로드 된 스타일 시트 문서를 문자열로 직렬화하고, ByteArrayInputStream (또는 더 나쁜 것은 파일에 쓰십시오)으로 변환 한 다음이를 사용하여 StreamSource를 만들 수 있습니다.하지만 그건 바보입니다.
이것이 작동하지 않는 이유가 있을까요?
는 XML-file.xml 코드 :
<?xml version="1.0"?>
<sparql>
<head>
<variable name="buyerName"/>
</head>
<results>
<result>
<binding name="buyerName">
<literal>John Doe</literal>
</binding>
</result>
</results>
</sparql>
stylesheet.xml 코드 :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:po="http://www.w3.org/2002/ws/sawsdl/spec/wsdl/order#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:template match="/sparql">
<xsl:for-each select="results/result">
<buyer xsi:type="po:Buyer">
<name xsi:type="string"><xsl:value-of select="binding[@name='buyerName']/literal" /></name>
</buyer>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
감사합니다!
윌리엄
자, 이건 성숙한 기술이라고 생각합니다. 아무도 지식이나 경험이 없습니까? :-( –