我想使用 xsl 檔案創建 xml 檔案,該檔案僅在記憶體資料中使用(不使用源檔案)。我有下面的代碼,但我不確定在源檔案中使用什么
例如,xsl 的一部分:
<ExternalReference>
<xsl:value-of select="erstefnImport:retriveXslExternalReference()" />
</ExternalReference>
代碼部分:
if (xsltFile != null) {
Transformer transformer = getTransformer(xsltFile);
Source source = null;
try {
source = new StreamSource(new FileInputStream(null));// ??
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
StreamResult outputTarget = new StreamResult(byteOutputStream);
if (transformer != null) {
try {
transformer.transform(source, outputTarget);
rst = new String(byteOutputStream.toByteArray());
} catch (Exception e) {
Log.error(this, "Error while transforming xml.", e);
}
}
}
我嘗試使用 Document 作為源,但輸出僅為:
<?xml version="1.0" encoding="iso-8859-1"?>
編碼 :
if (xsltFile != null) {
Transformer transformer = getTransformer(xsltFile);
Source source = null;
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
Document docResult = null;
try {
docResult = docFactory.newDocumentBuilder().newDocument();
} catch (ParserConfigurationException e2) {
e2.printStackTrace();
}
DOMSource domSource = new DOMSource(docResult);
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
StreamResult outputTarget = new StreamResult(byteOutputStream);
if (transformer != null) {
try {
transformer.transform(domSource, outputTarget);
rst = new String(byteOutputStream.toByteArray());
} catch (Exception e) {
Log.error(this, "Error while transforming xml.", e);
}
}
}
uj5u.com熱心網友回復:
XSLT 1.0 以及 XSLT 1.0 處理器的 API 幾乎都是圍繞將源樹作為 XSLT 樣式表的輸入進行處理的想法構建的。
這在 XSLT 2 和 3 中是不同的,在 XSLT 2 中,您可以使用命名模板開始處理,在 XSLT 3 中,您也可以從呼叫公共函式開始。
當您使用 Java 時,您可以輕松考慮切換到 Saxon 10,在 Sourceforge 和 Maven 的開源 HE 版本中可用,以使用 XSLT 3,然后確保您使用自己的 API https://www.saxonica.com /html/documentation10/using-xsl/embedding/s9api-transformation.html其方法類似于callTemplate( https://www.saxonica.com/html/documentation10/using-xsl/embedding/s9api-transformation.html ) 或callFunction( https ://www.saxonica.com/html/documentation10/javadoc/net/sf/saxon/s9api/Xslt30Transformer.html#callFunction-net.sf.saxon.s9api.QName-net.sf.saxon.s9api.XdmValue:A - )。
在 XSLT 3 中,初始模板有一個預定義的名稱,即
<xsl:template name="xsl:initial-template">
<root>
<foo>bar</foo>
</root>
</xsl:template>
在 XSLT 中沒有預定義的命名,因此您可以選擇一個,main例如
<xsl:template name="main">
<root>
<foo>bar</foo>
</root>
</xsl:template>
然后使用callTemplateAPI的參考方法來使用main名稱(new QName("", "main")我認為)。
uj5u.com熱心網友回復:
我發現使用(幾乎)空的 xml 源檔案會起作用。只需要在該源 xml 中使用根標記(在本例中為 map),并在 xsl tempele 中使用此標記名稱:
<xsl:template match="map">
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/339840.html
上一篇:Android布局未加載
