我正在使用getNodeValue()
中的org.w3c.dom.Node
来获取XML标记值。如果一个值包含ä,ö,ü或其他类似的特殊字符,我的程序就会切断字符串;例如“Türen”将成为“T”。如何使用特殊字符获取完整值?
我调用getTextValueOfFirstChild来获取textvalue
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/>
答案 0 :(得分:2)
这可能是因为有问题的节点是文本节点,并且只包含字符串的第一部分。它的下一个兄弟将是另一个包含重音字符的节点,它将包含一个包含字符串最后部分的兄弟。
解析器可以自由地以这种方式构建节点,并且可能是这样做的,因为它遇到了重音字符作为实体。
这主要是猜测,我应该补充一下。
在任何情况下,我建议不要使用文本节点,而是调用get元素,并调用getTextContent()方法,该方法将遍历所有子节点并将它们构建为单个字符串。 / p>
答案 1 :(得分:1)
如果特殊字符作为实体引用出现在源XML中,那么您可能在DOM中将实体节点作为元素节点的子节点,并且您的代码可能无法正确处理实体节点:您可能会错误地认为所有文本都在一个文本节点中。 (这是使用DOM这么痛苦的很多原因之一 - 您是否考虑过替代方案?)
答案 2 :(得分:0)
我的理论是OP的应用程序正在使用错误的字符集/编码来读取XML。不幸的是,除非他/她发布用于解析XML以创建DOM的代码,否则我们无法确认这一点。