首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用saxon s9api以编程方式向节点添加属性?

如何使用saxon s9api以编程方式向节点添加属性?
EN

Stack Overflow用户
提问于 2017-09-19 16:57:35
回答 1查看 271关注 0票数 0

我正在尝试生成具有xml文件和xsl转换的多个静态html页面。我使用迭代器对每个html页面进行转换。

我想修改一个节点并添加一个属性。我看到了一些例子,并写了下面的代码,但我不知道如何检索NamePool,s9api必须更改,因为"getNamePool()“没有在NodeInfo或MutableNodeInfo中列出。

如何正确地向节点添加属性以及如何检索NamePool?

代码语言:javascript
复制
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();
     }
EN

回答 1

Stack Overflow用户

发布于 2017-09-19 19:32:05

MutableNodeInfo中的更新接口是为XQuery更新特性而设计的:从技术上讲,没有什么可以阻止直接在XQuery应用程序中使用它们,但是它们不是为可用性而设计的,并且它们没有独立于Java进行测试,所以如果以意外或不受支持的方式使用它们,它们可能会崩溃。

您可以作为Processor.getUnderlyingConfiguration().getNamePool().访问NamePool

我想您可能会发现使用FingerprintedQName作为NodeName实现会更方便,这样就不需要担心指纹和NamePool了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46296084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档