小编use*_*390的帖子

javax.xml.transform.Transformer忽略前缀?

我试图解析一个非常简单的例子:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/'>
    <openSearch:totalResults>100</openSearch:totalResults>
</root>
Run Code Online (Sandbox Code Playgroud)

我使用的样式表如下:

<?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>
Run Code Online (Sandbox Code Playgroud)

这在libxslt中工作,没问题.我现在尝试在java中执行相同的任务,我正在尝试使用javax.xml.transform包来执行此操作.它不是预期的结果,而是为total-results属性提供一个空值.但是,当我将值更改为:

                <xsl:value-of select="root/totalResults"/>
Run Code Online (Sandbox Code Playgroud)

有用.更改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 = …
Run Code Online (Sandbox Code Playgroud)

java xml xslt

3
推荐指数
1
解决办法
5461
查看次数

标签 统计

java ×1

xml ×1

xslt ×1