[英]Creating XML from XPATH
我是使用xml和XSL的新手,可以使用舊版平台...
我正在尋找從XPATH創建XML的解決方案。 碰巧看到這篇文章如何從一組XPath表達式生成XML文件? 這對我很有幫助。
與“注釋”部分中討論的請求類似,我試圖將整個XSLT作為字符串傳遞,並使用Saxon接收結果作為字符串。 接收結果為字符串,沒有問題。 但是當將XSL作為字符串傳遞時,它抱怨“ document()”,它是<xsl:variable name =“ vStylesheet” select =“ document('') ” />的一部分。
錯誤為“ SXXP0003:XML解析器報告錯誤:序言中不允許內容。” 我的基本要求是我應該能夠將XSL(整個文件或“ vPop”部分)作為字符串傳遞,並且應該在不涉及任何文件的情況下在另一個字符串中接收結果。 這樣,我可以提高性能並使它通用,這樣我們商店中任何不知道如何處理XML的人仍然可以生成一個XML。
我的Java代碼看起來像..
public static String simpleTransform(final String xsltStr) {
String strResult = "";
TransformerFactory tFactory = TransformerFactory.newInstance();
String tempXMLStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<OpnXMLTAG>Dummy</OpnXMLTAG>";
try {
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
StreamSource XSLSource = new StreamSource(new StringReader(xsltStr));
Transformer transformer = tFactory.newTransformer(XSLSource );
transformer.transform(new StreamSource(new StringReader(tempXMLStr)), result);
strResult = writer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return strResult;
}
我傳遞的XSLT字符串與之前的文章相同。
當您調用document('')時,它將''作為要相對於樣式表的基本URI解析的相對URI引用。 如果樣式表的基本URI未知,則此方法將不起作用,當您將其作為StreamSource提供(包裝不帶SystemId的StringReader時)時,情況就是如此。
對於Saxon,document('')實際上需要重新讀取樣式表。 它不會在運行時保留源文件,以防萬一。 因此,您需要(a)提供URI作為StreamSource上的systemId屬性(任何URI都會提供,實際上不會被讀取),以及(b)提供URIResolver來解決對document('' )並提供原始字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.