【问题标题】:Node to string without parent information没有父信息的节点到字符串
【发布时间】:2011-09-30 23:50:54
【问题描述】:

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

我怎样才能只将 self 或 decendant 作为字符串?并且可能从父级窃取命名空间声明?

【问题讨论】:

    标签: java xml xpath transform w3c


    【解决方案1】:

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

    解决方法很简单

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

    例如,代替

    /x/y/z
    

    使用

    /x/y/z/text()
    

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

    更新

    OP已在评论中澄清:

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

    这可以在 XSLT 中完成,使用

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

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

    theSelectedNode.InnerXml
    

    【讨论】:

    • 谢谢,我试过了,但它只在节点中给出了我的真实文本。我想要当前节点中所有内容(节点和文本)的字符串重新表示,而不需要父节点的信息。例如,如果我只有一个 xml 文件并用文本编辑器打开它,然后复制一些子树。你知道我在说什么吗?
    • @FranzKafka:是的,现在我知道你想要什么了。查看我的问题的更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2018-04-07
    • 2011-03-25
    • 2019-01-20
    • 2013-02-04
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多