Я пытаюсь импортировать изображение из формата SVG в программное обеспечение, с которым я работаю. Например, у меня есть SVG:
<svg height="100" width="100">
<text>I Love SVG!
<tspan> NOT! </tspan>"
</text>
</svg>
При обработке этих данных элемент "text", у меня есть TextString = "element.getTextContent()". Это делает TextString = "Я люблю SVG! НЕ!" когда все, что я хочу, это "Я люблю SVG!". Поэтому метод getTextContent возвращает текст из элемента и его дочерних элементов, когда я не хочу включать текст дочерних элементов.
Есть ли простой способ захватить только текстовое содержимое элемента, не получая также текст дочерних узлов? благодаря
Выяснил решение моей проблемы, спасибо за предложения JLRishe и кулатамикуды.
вместо TextString = element.getTextContent() (который получил текст из всех дочерних узлов, а также исходного текстового узла)
Я использовал TextString = element.getFirstChild(). GetTextContent().
При использовании этого я убедился, что первый ребенок на самом деле является текстовым узлом, а не что-то вроде этого:
<text><tspan>tspan text</tspan></text>
Вы можете выполнять итерацию через дочерние узлы элемента, используя 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();
}
}
text
элемент в вашем примере имеет двух дочерних элементов, которые являются текстовыми узлами. Одним из них является текстовый узел, содержащий I Love SVG!
и некоторые пробелы, а другой - текстовый узел, содержащий "
и некоторые пробелы (может быть, это "
было просто опечаткой). Так как их может быть несколько, вы должны пройти через них, обрезать пробелы и объединять их по мере необходимости.