Узел к строке без родительской информации - PullRequest
1 голос
/ 01 октября 2011

Я использую 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 Ответ

1 голос
/ 01 октября 2011

Вы не показываете, как были выбраны узлы в наборе узлов.Скорее всего, они являются элементами, и это является причиной вашей проблемы.

Решение простое :

Создайте и используйте выражение XPath, которое выбирает только требуемый текстовые узлы .

Например, вместо :

/x/y/z

использовать

/x/y/z/text()

Последнее выражение выбирает любой текстовый узел, который является дочерним элементом любого элемента с именем z, который является дочерним элементом любого элемента с именем y, который является дочерним элементом верхнего элемента с именем x.

ОБНОВЛЕНИЕ :

ОП пояснил в комментарии:

"Спасибо, я пробовал это, но он дает мой реальный текст в узле. Я хочуСтроковое представление всего (узлов и текста) в текущем узле, без информации о родительских узлах. Например, если бы я просто имел XML-файл и открыл его в текстовом редакторе, а затем скопировал некоторое поддерево. Знаете ли вы, что яо чем? "

Это можно сделать в XSLT, используя

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

В качестве альтернативы, если ваш XML API это позволяет, для каждого выбранного узла используйте:

theSelectedNode.InnerXml
...