节点到字符串没有父信息

时间:2011-09-30 23:50:55

标签: java xml xpath transform w3c

我使用xpath来获取NodeList。然后我使用此代码来获取字符串表示,但它也有父节点。

StringWriter sw = new StringWriter();
    try {
    Transformer t = TransformerFactory.newInstance().newTransformer();
    t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    t.transform(new DOMSource(node), new StreamResult(sw));
    } catch (TransformerException e) {
        e.printStackTrace();
    }
    return sw.toString();

我怎样才能将自我或者后裔作为字符串?也许从父母那里窃取命名空间声明?

1 个答案:

答案 0 :(得分:1)

您没有显示如何选择节点集中的节点。很可能它们是元素,这是导致问题的原因。

解决方案很简单

构造并使用仅选择所需文本节点的XPath表达式。

例如,而不是

/x/y/z

使用

/x/y/z/text()

最后一个表达式选择任何文本节点,该节点是名为z的任何元素的子元素,该元素是名为y的任何元素的子元素,该元素是top元素的子元素,名为{{1} }。

<强>更新

OP已在评论中澄清:

  

“谢谢,我试过这个,但它只在节点中提供我的真实文本。我想要   当前的所有内容(节点和文本)的字符串重新表示   节点,没有父节点的信息。如果我愿意的话   有一个xml文件,并用文本编辑器打开它,然后复制出一些   子树。你知道我在说什么吗?“

这可以在XSLT中使用

完成
x

或者,如果您的XML API允许,则对于每个选定的节点使用:

<xsl:copy-of select="yourExpression/node()"/>