我的一個(gè)使用 Java 的項(xiàng)目需要基于抽象表示輸出 XML,該表示被建模為自己的類/數(shù)據(jù)類型??紤]到這個(gè)功能public static String renderToString(Node element) { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = null; try { transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); } catch (TransformerConfigurationException e) { e.printStackTrace(); } DOMSource source = new DOMSource(element); StreamResult result = new StreamResult(new StringWriter()); try { transformer.transform(source, result); } catch (TransformerException e) { e.printStackTrace(); } return result.getWriter().toString();}我編寫了一個(gè)測(cè)試,它構(gòu)造了一個(gè)等效于<FIELD ID="1" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="8000" COLLATION="SQL_Latin1_General_CP1_CI_AS" />這是由以下函數(shù)生成的public static Element createFieldElement(Document doc) { Element fieldElement = doc.createElement("FIELD"); ... fieldElement.setAttribute("xsi:type", "CharTerm"); return fieldElement;}將此元素傳遞給函數(shù)我現(xiàn)在收到一個(gè)錯(cuò)誤,告訴我缺少 'xsi' 命名空間(它與 xsi:type 屬性一起使用),這是有道理的,因?yàn)槲覈L試呈現(xiàn)的元素不是完整的 XML 文檔。是否有我必須設(shè)置的選項(xiàng)或任何方法來(lái)繞過(guò) XML 命名空間聲明以保持我的代碼可測(cè)試?否則我會(huì)嘗試模擬一些函數(shù)來(lái)欺騙 Transformer 渲染元素,但我不會(huì)建議這是一個(gè)方便的選擇。
將 DOM 節(jié)點(diǎn)呈現(xiàn)為字符串而不在 Java 中指定命名空間
慕田峪9158850
2021-09-26 16:57:38