Почему нельзя получить getNodeValue () из org.w3c.dom для анализа, ö, ä и т. Д.? - PullRequest
1 голос
/ 05 апреля 2011

Я использую getNodeValue() из org.w3c.dom.Node для получения значений тегов XML. Если значение содержит ä, ö, ü или другие подобные символы, моя программа просто обрезает строку; например «Тюрен» станет «Т». Как я могу получить полные значения с помощью специальных символов?

Я вызываю getTextValueOfFirstChild, чтобы получить текстовое значение

 public static String getTextValueOfFirstChild(Node node, String childName)
 {
                Node node1;
                Node node2;
                if((node1 = getFirstChildNode(node, childName)) != null && (node2 = node1.getFirstChild()) != null)
                    return node2.getNodeValue();
                else
                    return null;
}

public static Node getFirstChildNode(Node parent, String name)
{
        if(parent != null)
        {
            NodeList nodelist;
            int i = (nodelist = parent.getChildNodes()).getLength();
            for(int j = 0; j < i; j++)
            {
                Node node = nodelist.item(j);
                if(name.equals(node.getNodeName()))
                    return node;
            }

        }
        return null;
}

<carinfo>
<id>l3nqd2dpwikl</id>
<makename>Fiat</makename>
<modelname>Ducato</modelname>
<typename>HKAWA 30 L2H2 120 Multijet</typename>
<bodytype>2/3 Türen</bodytype>
<extrainfo/>
<bodycolorid/>
<intcolorid>0</intcolorid>
<logo/>

Ответы [ 3 ]

2 голосов
/ 05 апреля 2011

Вероятно, это связано с тем, что рассматриваемый узел является текстовым узлом и содержит только первую часть строки.Его следующий родной брат будет другим узлом, содержащим символ с акцентом, и у него будет родной брат, содержащий последнюю часть строки.акцентированные символы как сущности.

Это в основном догадки, я должен добавить.

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

1 голос
/ 05 апреля 2011

Если специальные символы появились в исходном XML как ссылки на сущность, то у вас могут быть узлы сущности в DOM как дочерние элементы узла элемента, и ваш код может не обрабатывать узлы сущности правильно: возможно, вы неправильно предполагаете, чтовесь текст находится в одном текстовом узле.(Это одна из очень многих причин, почему использование DOM является такой болью - вы рассматривали альтернативы?)

0 голосов
/ 07 апреля 2011

Моя теория состоит в том, что приложение OP читает XML, используя неправильный набор символов / кодировку. К сожалению, мы не сможем подтвердить это, если он / она не отправит код, который он использует для анализа XML для создания DOM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...