0
  • フィードを「プロキシ」する必要があります
  • ほとんどのノードをそのままにしておきます
  • いくつかのJavaメソッドを呼び出して、いくつかの既知のノードのコンテンツを変換します
  • 変換されたフィードを返します

もちろん、私は避けたいです-フィード全体をメモリにロードする-他のノードを変換する-パフォーマンスが悪い

これは一種のJavaパイプです!

あなたの推薦をありがとう

4

3 に答える 3

0

「メモリにロードされない」ことについてはわかりませんが、xmlを変換する場合は、xsltxpathを検討する必要があります。

于 2009-05-28T15:51:42.723 に答える
0

これは私が使用するものです:

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.dom.DOMResult;
import org.w3c.dom.Document;
...
TransformerFactory mTransformFactory = TransformerFactory.newInstance();
cTransformer = mTransformFactory.newTransformer(new StreamSource(new StringReader(StringUtil.readFromResource("/foo.xslt"))));
Document mResultDoc = XmlUtil.createDocument();
Document mResultDoc = XmlUtil.parseXmlFile("foo.xml");
transformer.transform(new DOMSource(source), new DOMResult(mResultDoc));

メモリのオーバーヘッドを回避したいので、DOMSourceとDOMResultの使用法を同等のSAXに置き換える必要があります。StringおよびXMLutilクラスの使用法は、コンテキストから明らかである必要があります。

于 2009-05-28T19:49:02.727 に答える
0

回答ありがとうございます:これが最終結果です

TransformerFactory tFactory = TransformerFactory.newInstance();
InputStream xslt = FeedSecurityException.class.getResourceAsStream("/filter.xslt");
Transformer transformer = tFactory.newTransformer(new StreamSource(xslt));
transformer.transform(new StreamSource(input), new StreamResult(ouput));

そして、ある種のノードに対してjavaメソッドを呼び出し、他のノードはそのままにしておくXSLT

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xslt/java">


<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no" />


<xsl:template match="CHANGED_NODE">
    <xsl:element name="CHANGED_NODE">
        <xsl:value-of select="java:com.mypackage.MyClass.tranformContent(.)"/>
   </xsl:element>
</xsl:template>

<xsl:template match="node()|@*">
<xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
</xsl:template>

</xsl:stylesheet>
于 2009-05-29T17:57:23.013 に答える