私は非常に単純な例を解析しようとしています:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/'>
<openSearch:totalResults>100</openSearch:totalResults>
</root>
私が使用しているスタイルシートは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:app='http://www.w3.org/2007/app' >
<xsl:output method="xml" indent="yes"/>
<xsl:preserve-space elements="*"/>
<xsl:template match="/">
<results>
<xsl:attribute name="total-results">
<xsl:value-of
select="atom:root/openSearch:totalResults"/>
</xsl:attribute>
</results>
</xsl:template>
</xsl:stylesheet>
これは libxslt で動作しますが、問題ありません。私は今Javaで同じタスクを実行しようとしています.javax.xml.transformパッケージを使用してこれを実行しようとしています. 予想される結果の代わりに、total-results 属性に空の値が提供されます。ただし、value-of を次のように変更すると、次のようになります。
<xsl:value-of select="root/totalResults"/>
できます。xml と xslt を変更することはできません。どこかに設定する必要があるパラメータはありますか? コードは非常に簡単です。
InputSource xmlSource = new InputSource( new StringReader(xml) );
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(xmlSource);
// Use a Transformer for output
TransformerFactory tFactory = TransformerFactory.newInstance();
StreamSource stylesource = new StreamSource(new StringReader(styleSheet));
Transformer transformer = tFactory.newTransformer(stylesource);
StringWriter writer = new StringWriter();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(writer);
transformer.transform(source, result);
stringResult = writer.toString();