私はxmlファイルとxsl変換を持つ複数の静的なHTMLページを生成しようとしています。私はすべてのHTMLページの変換を行うためにイテレータを使用しました。saxon s9apiを使用してプログラムでノードに属性を追加する方法は?
ノードを変更して属性を追加したいとします。私はいくつかの例を見て、以下のコードを書いたが、NamePoolを取得する方法がわからないので、NodeInfoまたはMutableNodeInfoに "getNamePool()"がリストされていないため、s9apiを変更する必要があります。
ノードに属性を正しく追加するにはどうしたらいいですか、どのようにNamePoolを取得できますか? MutableNodeInfoで
Processor processor = new Processor(false);
XsltCompiler compiler = processor.newXsltCompiler();
XsltTransformer transformer = compiler.compile(new StreamSource(new File(xlsFilePath))).load();
XdmNode source = processor.newDocumentBuilder().build(new StreamSource(new File(xmlFilePath)));
XdmValue xdmValue = processor.newXPathCompiler().evaluate(xpathExpression, source);
for (XdmItem xdmItem : xdmValue) {
XdmNode xdmNode = (XdmNode)xdmItem;
MutableNodeInfo node = (MutableNodeInfo)xdmNode.getUnderlyingNode();
NodeInfo nodeInfo = (NodeInfo)xdmNode.getUnderlyingNode().;
NamePool namePool = ...//retrieve namePoll
CodedName codedName = new CodedName(node.getFingerprint(), node.getPrefix(), namePool);
node.addAttribute(codedName, BuiltInAtomicType.UNTYPED_ATOMIC, "1", 0);
Serializer out = processor.newSerializer(new File(outputFolderPath + xdmNode.getAttributeValue(new QName("id")) +".html"));
out.setOutputProperty(Serializer.Property.METHOD, "html");
out.setOutputProperty(Serializer.Property.INDENT, "yes");
out.setOutputProperty(Serializer.Property.VERSION, "5");
transformer.setInitialContextNode(xdmNode);
transformer.setDestination(out);
transformer.transform();
}
Michaelさん、FingerprintedQNameを試しましたが、ビルド時にnet.sf.saxon.tree.tiny.TinyElementImplをnet.sf.saxon.om.MutableNodeInfoにキャストできませんでした。属性を正しく追加するために欠けているものは何ですか? – Tvori