2017-09-19 3 views
0

私は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(); 
    } 

答えて

1

更新インタフェースは、XQuery更新機能で使用するために設計されていますが、技術的にJavaアプリケーションから直接使用され、それらを防ぐものは何もありませんが、彼らは、使いやすさのために設計されていなかった、と彼らはされていませんXQuery Updateとは独立してテストされるため、意図しない方法やサポートされていない方法で使用するとクラッシュする可能性があります。

NamePoolには、Processor.getUnderlyingConfiguration()。getNamePool()としてアクセスできます。

おそらく、FingerprintedQNameをNodeNameの実装として使用する方が便利だと思うでしょうし、指紋やNamePoolについて心配する必要はありません。

+0

Michaelさん、FingerprintedQNameを試しましたが、ビルド時にnet.sf.saxon.tree.tiny.TinyElementImplをnet.sf.saxon.om.MutableNodeInfoにキャストできませんでした。属性を正しく追加するために欠けているものは何ですか? – Tvori

関連する問題