Получение текстового содержимого элемента XML без получения текстового содержимого его дочерних узлов

1

Я пытаюсь импортировать изображение из формата SVG в программное обеспечение, с которым я работаю. Например, у меня есть SVG:

<svg height="100" width="100">
    <text>I Love SVG!
        <tspan> NOT! </tspan>"
    </text>
</svg>

При обработке этих данных элемент "text", у меня есть TextString = "element.getTextContent()". Это делает TextString = "Я люблю SVG! НЕ!" когда все, что я хочу, это "Я люблю SVG!". Поэтому метод getTextContent возвращает текст из элемента и его дочерних элементов, когда я не хочу включать текст дочерних элементов.

Есть ли простой способ захватить только текстовое содержимое элемента, не получая также текст дочерних узлов? благодаря

Теги:
svg
text

2 ответа

0

Выяснил решение моей проблемы, спасибо за предложения JLRishe и кулатамикуды.

вместо TextString = element.getTextContent() (который получил текст из всех дочерних узлов, а также исходного текстового узла)

Я использовал TextString = element.getFirstChild(). GetTextContent().

При использовании этого я убедился, что первый ребенок на самом деле является текстовым узлом, а не что-то вроде этого:

<text><tspan>tspan text</tspan></text>
0

Вы можете выполнять итерацию через дочерние узлы элемента, используя element.getChildNodes(). Любой из них, имеющих тип узла Node.TEXT_NODE является текстовыми узлами (их часто будет больше одного).

String textContent = "";
NodeList childNodes = element.getChildNodes();
for (int i = 0; i < childNodes.length(); i++) {
    Node n = childNodes.item(i);
    if (n.getNodeType() == Node.TEXT_NODE) {
       textContent += n.getNodeValue();
    }
}
  • 0
    Хорошо, но я хочу, чтобы текстовое содержимое для исходного текстового элемента имело только текст его элемента, а не его дочерних элементов (например, значение TextString для текста было бы "I Love SVG!", А TextString для tspan было бы "Не !»
  • 0
    @DirtyProgrammer Да, это именно то, что я показываю вам, как это сделать. text элемент в вашем примере имеет двух дочерних элементов, которые являются текстовыми узлами. Одним из них является текстовый узел, содержащий I Love SVG! и некоторые пробелы, а другой - текстовый узел, содержащий " и некоторые пробелы (может быть, это " было просто опечаткой). Так как их может быть несколько, вы должны пройти через них, обрезать пробелы и объединять их по мере необходимости.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню