我使用jxpath打印所有节点,并将子节点添加到此xml中的特性标记中。
<extracts>
<extract>
<id>1</id>
<features>
<feature>1</feature>
<feature>2</feature>
</extract>
</extracts>这就是我的代码(至少可以打印一些信息的部分):
import org.apache.commons.jxpath.ri.model.*;
import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.Pointer;
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
ByteArrayInputStream bais = new ByteArrayInputStream(getBytesFromFile(file));
Document doc = builder.parse(bais);
JXPathContext jxpathCtx = JXPathContext.newContext(doc.getDocumentElement());
jxpathCtx.setLenient(true);我要求的第一部分--即打印这些节点--非常简单:
for (Iterator iter2 = jxpathCtx.iterate("/extract/*"); iter2.hasNext();)
{
System.out.println("\n Value is : " + iter2.next().toString() +"\n");
}我要求的第二部分是我得到的东西。
我需要添加一个新条目--一个新的<features> < extract >下的 < Feature>3< /feature > 节点
它可能类似于隔离那个节点--然后给它添加一个子节点--我只是不知道该如何去做:
org.apache.commons.configuration.HierarchicalConfiguration.NodeNode node = (Node)jxpathCtx.selectNodes("/extract/lastruns/lastrun");
for (Element node : nodes)
{
}如有任何意见/帮助,将不胜感激
发布于 2012-06-13 14:28:20
此XSLT转换
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="feature[last()]">
<xsl:call-template name="identity"/>
<feature>3</feature>
</xsl:template>
</xsl:stylesheet>应用于所提供的XML文档(更正为格式良好):
<extracts>
<extract>
<id>1</id>
<features>
<feature>1</feature>
<feature>2</feature>
</features>
</extract>
</extracts>生成想要的、正确的结果
<extracts>
<extract>
<id>1</id>
<features>
<feature>1</feature>
<feature>2</feature>
<feature>3</feature>
</features>
</extract>
</extracts>解释
正确使用和重写身份规则。
https://stackoverflow.com/questions/11009195
复制相似问题