节点转换为没有父节点信息的字符串



我使用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();

我怎么能只得到自己或后代作为字符串?或者从父命名空间中窃取命名空间声明?

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

解决方案很简单:

构造并使用一个XPath表达式,该表达式只选择所需的文本节点

例如,不用:

/x/y/z
使用

/x/y/z/text()

最后一个表达式选择任何文本节点,该节点是名称为z的元素的子节点,该元素是名称为y的元素的子节点,该元素是名称为x的顶部元素的子元素。

:

OP已在评论中澄清:

"谢谢,我试过了,但它只给出了我在节点的真实文本。我想要的对象中所有内容(节点和文本)的字符串表示节点,不包含父节点的信息。如果我能有一个XML文件,然后用文本编辑器打开它,然后复制一些子树。你知道我在说什么吗?"

这可以在XSLT中完成,使用
<xsl:copy-of select="yourExpression/node()"/> 

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

theSelectedNode.InnerXml

最新更新